Существует ли транслитерация из UTF-8 в CP1251, когда один символ заменяется несколькими символами?
Я использую функцию iconv с опцией translit.
Существует ли транслитерация из UTF-8 в CP1251, когда один символ заменяется несколькими символами? Где я могу найти эту информацию? Я использую iconv.
2 ответа
Есть несколько, в зависимости от реализации и локали:
$ echo '℀⇒½' | iconv -f UTF8 -t CP1251//TRANSLIT
a/c=> 1/2
Это соответственно U+2100 АККАУНТ OF транслитерированный как a/c
, U + 21D2 ДВОЙНАЯ СТРЕЛКА ПРАВА, транслитерированная как =>
, U + 00BDВУЛГАРНАЯ ФРАКЦИЯ ОДНА ПОЛОВИНА транслитерируется как 1/2
(включая пробелы).
Я нашел их в исходном коде libc GNU, https://github.com/lattera/glibc/blob/master/locale/C-translit.h.in; различные реализации могут не транслитерировать эти символы одинаково, если вообще.
Самый очевидный
$ echo 'ß' | iconv -f UTF-8 -t CP1251//TRANSLIT
ss
Кроме того, если вы используете немецкий язык, умлауты транслитерируются в соответствии с немецкими правилами (да, транслитерация зависит от локали).
$ export LC_ALL=de_DE.UTF-8
$ echo 'Füße' | iconv -f utf-8 -t CP1251//TRANSLIT
Fuesse
(Некоторые версии будут печатать F"usse
вместо).