Не удалось просмотреть домашний WiFi [dубликат]

shell

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

$ echo "%C3%A6ndr%C3%BCk" | sed 's@+@ @g;s@%@\\x@g' | xargs -0 printf "%b"
ændrük

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

$ 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 () предполагает, что данные не содержат обратную косую черту.

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
}

Найдена в основном файле cdown, также в stackableflow.

Python

Попробуйте определить следующие псевдонимы:

alias urldecode='python -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])"'
alias urlencode='python -c "import sys, urllib as ul; print ul.quote_plus(sys.argv[1])"'

Использование:

$ urlencode "ændrük"
C%26ndrC%3Ck
$ urldecode "%C3%A6ndr%C3%BCk"
ændrük

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

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 вы можете использовать cist's gist file .

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

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

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

sed

Использование sed может быть достигнуто с помощью:

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

awk

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

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

См. anon .

[!d46 ]

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

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

См. Также:

Может ли wget декодировать имена файлов uri при загрузке в пакетном режиме? Как удалить кодировку URI из имен файлов?

Связано:

Может ли wget декодировать имена файлов uri при загрузке в пакетном режиме? Может ли wget декодировать имена файлов uri при загрузке в пакетном режиме? в unix SE
0
задан 22 May 2017 в 15:58

0 ответов

Другие вопросы по тегам:

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