             '[ dup @ [ , ] [ hex% ] if ] each
         ] [
             [ present ] dip
-            '[ dup @ [ , ] [ push-utf8 ] if ] each
+            '[ dup @ [ , ] [ hex-utf8% ] if ] each
         ] if
     ] "" make ; inline
 

        2dup length >= [
            2drop
        ] [
            2dup nth dup CHAR: % = [
                drop 2dup _ decode-uri-hex [ 3 + ] dip
            ] [
                1string utf8 encode % [ 1 + ] dip
            ] if _ decode-uri-iter
        ] if
    ] call ; inline recursive


<PRIVATE

: utf8% ( ch -- )
    building get utf8 encode-char ;

: url-decode-hex ( index str -- )
    2dup length 2 - >= [
        2drop
