diff --git a/share/functions/__fish_urlencode.fish b/share/functions/__fish_urlencode.fish index ab13beaa6..d17451f32 100644 --- a/share/functions/__fish_urlencode.fish +++ b/share/functions/__fish_urlencode.fish @@ -1,10 +1,11 @@ function __fish_urlencode --description "URL-encode stdin" - set -l IFS '' set -l output - while read --array --local lines - if [ (count $lines) -gt 0 ] - set output $output (printf '%%%02x' "'"$lines"'" | sed -e 's/%2[fF]/\//g') + set -l chars + # Set locale to C and IFS to "" in order to split a line into bytes. + while begin; set -lx LC_ALL C; set -lx IFS ''; read --array chars; end + if count $chars > /dev/null + set output $output (printf '%%%02x' "'"$chars) end end - echo -s $output + echo -s $output | sed -e 's/%2[fF]/\//g' end