Java отказывается прослушивать IPv6 «под ключ»

sed

Попробуйте следующую командную строку:

$ sed 's@+@ @g;s@%@\\x@g' file | xargs -0 printf "%b"

или следующую альтернативу, используя echo -e:

$ sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' file | xargs echo -e

Примечание: Приведенный выше синтаксис может не преобразовывать + в пробелы, и может съесть все новые строки.


Вы можете определить его как псевдоним и добавить его в файлы оболочки rc:

$ alias urldecode='sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b"'

Затем каждый раз, когда он вам понадобится, просто используйте:

$ echo "http%3A%2F%2Fwww" | urldecode
http://www

Bash

При написании сценариев вы можете использовать следующий синтаксис:

input="http%3A%2F%2Fwww"
decoded=$(printf '%b' "${input//%/\\x}")

Однако вышеприведенный синтаксис не будет правильно обрабатывать плюсы (+), поэтому вам придется заменить их пробелами через sed.

Вы также можете использовать следующие функции urlencode() и urldecode():

urlencode() {
    # urlencode 
    local length="${#1}"
    for (( i = 0; i < length; i++ )); do
        local c="${1:i:1}"
        case $c in
            [a-zA-Z0-9.~_-]) printf "$c" ;;
            *) printf '%%%02X' "'$c" ;;
        esac
    done
}

urldecode() {
    # urldecode 

    local url_encoded="${1//+/ }"
    printf '%b' "${url_encoded//%/\\x}"
}

Обратите внимание, что вышеприведенная urldecode() предполагает, что данные не содержат обратной косой черты.

Вот аналогичная версия Джоэла, найденная по адресу: https://github.com/sixarm/urldecode.sh


bash + xxd

Функция Bash с помощью инструмента xxd:

urlencode() {
  local length="${#1}"
  for (( i = 0; i < length; i++ )); do
    local c="${1:i:1}"
    case $c in
      [a-zA-Z0-9.~_-]) printf "$c" ;;
    *) printf "$c" | xxd -p -c1 | while read x;do printf "%%%s" "$x";done
  esac
done
}

Найдено в gist-файле cdown, также на stackoverflow.


PHP

Используя PHP, вы можете попробовать следующую команду:

$ echo oil+and+gas | php -r 'echo urldecode(fgets(STDIN));' // Or: php://stdin
oil and gas

или просто:

php -r 'echo urldecode("oil+and+gas");'

Используйте -R для ввода нескольких строк.


Perl

В Perl вы можете использовать URI::Escape.

decoded_url=$(perl -MURI::Escape -e 'print uri_unescape($ARGV[0])' "$encoded_url")

Или для обработки файла:

perl -i -MURI::Escape -e 'print uri_unescape($ARGV[0])' file

awk

Попробуйте решение anon:

awk -niord '{printf RT?$0chr("0x"substr(RT,2)):$0}' RS=%..

Примечание: Параметр -n специфичен для GNU awk.

См: Использование awk printf для урлдекодирования текста.

декодирование имен файлов

Если вам нужно удалить url-кодировку из имен файлов, используйте инструмент deurlname из renameutils (например, deurlname *.*).

См. также:


Связанные:

1
17.12.2017, 20:36
0 ответов

Теги

Похожие вопросы