Как заменить все подстрочные индексы 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/

  • Как установить кодировку VIM по умолчанию в UTF-8?
  • Как преобразовать смайлик, указанный кодом U + xxxxx, в utf-8?
  • Неанглийские буквы в html2text?
  • Команда вроде `column -t`, но агностик типа кодирования?
  • В чем разница между locale en_AG и en_AG.utf8?
  • Как печатать имена символа Unicode для строки ввода?
  • Как я могу декодировать имя файла с помощью командной строки?
  • OpenBSD 5.6 / fvwm2 / xterm отсутствует поддержка UTF-8
  • Почему символы, отличные от ASCII, отображаются с помощью вопросительного знака?
  • Консоль Linux не может отображать какой-либо язык, кроме английского, в то время как терминал под Gnome может
  • Как получить сортировку unix для сортировки в том же порядке, что и Java (по значению unicode)
  • Linux и Unix - лучшая ОС в мире.