Bash эквивалентно строковому литералу Python для преобразования строк в utf - PullRequest
1 голос
/ 07 июля 2010

Я пишу bash-скрипт, который должен анализировать html, который содержит специальные символы, такие как @!'ó. В настоящее время у меня запущен весь сценарий, и он игнорирует или отключает эти запросы, поскольку они возвращаются с сервера в виде десятичного Unicode, например: '. Я выяснил, как анализировать и преобразовывать в шестнадцатеричные и загружать их в python, чтобы преобразовать их обратно в символы, и мне интересно, может ли bash сделать это окончательное преобразование изначально. Простой пример на python:

print ur"\u0032" ur"\u0033" ur"\u0040"

распечатывает

23@

Можно ли добиться того же результата в Bash? Я посмотрел на iconv, но не думаю, что он может делать то, что я хочу, или, скорее всего, я просто не знаю, как.

Вот некоторая соответствующая информация:

Строковые литералы Python

Преобразование Hex в UTF в Python

А вот несколько примеров ожидаемого ввода-вывода.

Ludwig van Beethoven - 5th Symphony and 6th Symphony ''Pastoral'' - Boston Symphony Orchestra - Charles Munch

Ludwig van Beethoven - 5th Symphony and 6th Symphony ''Pastoral'' - Boston Symphony Orchestra - Charles Munch

АлисА (Alisa) - Мы вместе. ХХ лет (My vmeste XX let)

АлисА (Alisa) - Мы вместе. ХХ лет (My vmeste XX let)

Ответы [ 2 ]

2 голосов
/ 07 июля 2010

Встроенный в Bash printf не поддерживает коды Unicode, но внешний printf (по крайней мере, в моей системе на основе GNU):

$ /usr/bin/printf "\u0410\u043b\u0438\u0441\u0410"
АлисА

или этот, который выбирает printf с вашего пути, если его нет в /usr/bin:

$ $(type -P printf) "\u0410\u043b\u0438\u0441\u0410"
АлисА

или

$ env printf "\u0410\u043b\u0438\u0441\u0410"
АлисА
1 голос
/ 07 июля 2010

возможное решение, например ::1001

$ function conv() { echo $* | python -c 'import re, sys; print re.sub(r"&#(\d+);", lambda x: unichr(int(x.group(1))), sys.stdin.read()).rstrip()' ; }
$ conv 'АлисА (Alisa)' 
АлисА (Alisa)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...