LINUX.ORG.RU
решено ФорумAdmin

Как ковертировать символы из UTF-8 в вид «<U0412><U043E><U0441><U043A> и обратно

 , , ,


1

1

Привет

Решил поиграться с локалями в /usr/share/i18n/locales. Там юникодный текст представлен в виде кодов, например <U0412><U043E><U0441><U043A><U0440><U0435><U0441><U0435><U043D><U044C><U0435>.

Как это сконвертировать во что-то читабельное?

Перемещено hobbit из general

★★★★★

Как-то так, но для символов вне BMP не будет работать.

$ garbage2text() { echo "$@" | tr -d '<U>' | xxd -p -r | iconv -f utf16be; echo; }
$ text2garbage() { echo -n "$@" | iconv -t utf16be | xxd -p -u | sed 's/..../<U&>/g'; }

Проверка:

$ garbage2text '<U0412><U043E><U0441><U043A><U0440><U0435><U0441><U0435><U043D><U044C><U0435>'
Воскресенье
$ text2garbage Воскресенье
<U0412><U043E><U0441><U043A><U0440><U0435><U0441><U0435><U043D><U044C><U0435>
Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от mky

ascii2uni -a A

В Gentoo не нашел.

Судя по всему чисто Debian’овская штука, исходники вроде здесь, но требуют старой версии automake…

В любом случае, спасибо, если не хватит скрипта Xenius, буду пробивать ascii2uni.

Kroz ★★★★★
() автор топика
Ответ на: комментарий от Kroz

Судя по всему чисто Debian’

Перед моим коментом был комментарий, содержащий ссылку на оригинал. Судя по всему разработка закончилась в 2011 году, но на чисто дебиан не похоже.

но требуют старой версии automake

Этого я вобще не понял. Как требуют? Сейчас специально скачал stage3-amd64-openrc-20221023T170534Z.tar.xz, распаковал его, распаковал туда uni2ascii-4.18.tar.bz2. chroot'нулся туда без монтирования /dev/, /proc и т.д.:

# configure
# make
# echo '<U0412><U043E><U0441><U043A><U0440><U0435><U0441><U0435><U043D><U044C><U0435>' | ./ascii2uni -a A
Воскресенье
11 tokens converted

mky ★★★★★
()

Просто оставлю это здесь. Существует отдельная от glibc библиотека libiconv (только они конфиликтуют и вместе не хотят). И в libiconv входит команда iconv, которая в отличии от стандартной, имеет опции --unicode-subst, --byte-subst, --widechar-subst. И там можно:

echo AAA | iconv -f UTF-8 -t ASCII --unicode-subst='<U%04X>'

mky ★★★★★
()