Преобразование файла UTF-8 к ASCII (максимальные усилия)

Вы могли попробовать calibre для электронных книг без DRM.

24
07.12.2014, 01:38
5 ответов
konwert utf8-ascii

В зависимости от таблиц преобразования он выполнит преобразование с максимальной эффективностью. Если вы приблизительно знаете язык ввода, существуют фильтры для конкретных языков, дающие лучшие результаты, например

konwert utf8-xmetodo

- это преобразование эсперанто в представление x-metodo,

konwert UTF8-tex

будет пытаться сделать TeX-представление диакритических знаков, есть параметры, специфичные для языка:

konwert UTF8-ascii/de

будет транслитерировать «ä» в «ae» (обычное для немецкого языка) вместо простого «a»

konwert UTF8-ascii/rosyjski

будут использовать польские правила для транслитерации русского, вместо «английских» и т. д.

12
27.01.2020, 19:41

Это сработает для некоторых вещей:

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? ?????, используя предварительно скомпонованные символы.

25
27.01.2020, 19:41

У меня есть файл в кодировке UTF-8, содержащий [имена людей] на нескольких языках [которые я хочу преобразовать во что-то значимое в ASCII].

Вы имеете в виду, что хотите иметь возможность преобразовывать следующие имена в некоторую строку ASCII, против которой заинтересованное лицо не возражало бы?

  • ஸ்றீனிவாஸ ராமானுஜன் ஐயங்கார்
  • عبد الله الثاني بن الحسين

Я подозреваю, что нет автоматизированного инструмент, который может это сделать. Латинизации личных имен может не быть или очень много. Программное обеспечение не может выбрать культурно приемлемую версию. По крайней мере, без того, чтобы программное обеспечение хорошо знало культуру человека.

См. Также https://stackoverflow.com/a/1398403/477035

2
27.01.2020, 19:41

В итоге я использовал Perl с Text :: Unidecode для этого. Пример:

perl -e 'use utf8; use Text::Unidecode; print unidecode("عبد الله الثاني بسين")

производит bd llh lthny bn lHsyn , что является приемлемым результатом для моих целей.

2
27.01.2020, 19:41

попробуйuni2ascii -B input.txt >output.txt

uni2ascii

6
27.01.2020, 19:41

Теги

Похожие вопросы