konwert utf8-ascii
В зависимости от таблиц преобразования он выполнит преобразование с максимальной эффективностью. Если вы приблизительно знаете язык ввода, существуют фильтры для конкретных языков, дающие лучшие результаты, например
konwert utf8-xmetodo
- это преобразование эсперанто в представление x-metodo,
konwert UTF8-tex
будет пытаться сделать TeX-представление диакритических знаков, есть параметры, специфичные для языка:
konwert UTF8-ascii/de
будет транслитерировать «ä» в «ae» (обычное для немецкого языка) вместо простого «a»
konwert UTF8-ascii/rosyjski
будут использовать польские правила для транслитерации русского, вместо «английских» и т. д.
Это сработает для некоторых вещей:
iconv -f utf-8 -t ascii//TRANSLIT
echo ĥéĺłœ π | iconv -f utf-8 -t ascii//TRANSLIT
возвращает helloe ?
. Любые символы, которые iconv
не знает как конвертировать, будут заменены вопросительными знаками.
iconv
- это POSIX, но я не знаю, все ли системы имеют опцию TRANSLIT
. Это работает на мне под Linux. Также опция IGNORE
бесшумно отбрасывает символы, которые не могут быть представлены в целевом наборе символов (см. man iconv_open
).
Низкая, но соответствующая POSIX-совместимая опция должна использовать tr
. Эта команда заменяет все точки не-ASCII кода вопросительным знаком. Она читает текст UTF-8 по одному байту за раз. "É" может быть заменено на E?
или ?
, в зависимости от того, была ли она закодирована с использованием комбинированного акцента или предварительно скомпонованного символа.
echo café äëïöü | tr -d '\200-\277' | tr '\300-\377' '[?*]'
Этот пример возвращает caf? ?????
, используя предварительно скомпонованные символы.
У меня есть файл в кодировке UTF-8, содержащий [имена людей] на нескольких языках [которые я хочу преобразовать во что-то значимое в ASCII].
Вы имеете в виду, что хотите иметь возможность преобразовывать следующие имена в некоторую строку ASCII, против которой заинтересованное лицо не возражало бы?
Я подозреваю, что нет автоматизированного инструмент, который может это сделать. Латинизации личных имен может не быть или очень много. Программное обеспечение не может выбрать культурно приемлемую версию. По крайней мере, без того, чтобы программное обеспечение хорошо знало культуру человека.
В итоге я использовал Perl с Text :: Unidecode для этого. Пример:
perl -e 'use utf8; use Text::Unidecode; print unidecode("عبد الله الثاني بسين")
производит bd llh lthny bn lHsyn
, что является приемлемым результатом для моих целей.