Как заменить все подстрочные индексы UTF-8 с процентным кодированием на простой текст UTF-8?

У меня есть html-файл с большим количеством% -кодированного текста UTF-8 в URL-адресах.

Например, «% D1% 80% D0% B5% D1% 81% D1% 83% D1% 80% D1% 81% D1% 8B» означает «ресурсы» («ресурсы» на русском языке).

Задача состоит в том, чтобы заменить все такие подстроки на читаемый текст UTF-8.

Чтобы упростить задачу, мы можем рассмотреть, что в файле нет другого использования знака % . Буквенные цифры могут быть как верхними, так и нижними.

Я подозреваю, что это можно сделать элегантно с sed , perl , awk или чем-то, но не знаю, как это сделать.

Это веб-приложение, похоже, делает трюк с текстом, который вы вставляете туда.

3 Solutions collect form web for “Как заменить все подстрочные индексы UTF-8 с процентным кодированием на простой текст UTF-8?”

С bash, zsh, эхо-сигналом GNU или некоторыми реализациями ksh в некоторых системах это можно просто декодировать echo -e после замены всего % на \x .

 url_encoded_string="%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B" temp_string=${url_encoded_string//%/\\x} printf '%s\n' "$temp_string" # output: \xD1\x80\xD0\xB5\xD1\x81\xD1\x83\xD1\x80\xD1\x81\xD1\x8B echo -e "$temp_string" # output: ресурсы 

(Предполагается, что сама строка не содержит символов обратной косой черты и не является одной из опций, поддерживаемых вашей командой echo )

Как @JoshLee также указывает, "echo caveat" можно избежать, используя непосредственно:

 printf ${url_encoded_string//%/\\x} 

вместо этого непосредственно за первой командой.

С perl:

 perl -pe 's/%([0-9A-F]{2})/pack"H2",$1/gei' 

Или с URI::Escape :

 perl -MURI::Escape -pe '$_=uri_unescape$_' 

Существует программа под названием convmv которая может вам помочь.

Просто используйте convmv --unescape /some_path/target_file . Это сделает сухой пробег.

После подтверждения, используйте convmv --notest --unescape /some_path/target_file для продолжения.

Домашняя страница этой программы: http://j3e.de/linux/convmv/

  • tr не заменяет апостроф
  • Как я могу правильно распаковать ZIP-архив файлов с ивритскими именами?
  • Отсутствующие глифы с urxvt-unicode
  • Изменение шрифтов в приложении терминала Mate
  • Невозможно использовать `cut -c` (` --characters`) с UTF-8?
  • sv_SE.UTF-8 Проблемы с Bash и VIM в iTerm2
  • Существует ли универсальный способ записи символов Unicode?
  • Символы Юникода в статусной строке uxterm и dwm
  • Как определить, использует ли текущий язык кодировку UTF-8?
  • Отсутствующие символы в моем URXVT
  • Как найти, какой шрифт предоставляет определенный символ Unicode?
  • Linux и Unix - лучшая ОС в мире.