UTF-8 в ASCII с использованием библиотеки ICU - PullRequest
4 голосов
/ 07 октября 2008

У меня есть std :: string с символами UTF-8.
Я хочу преобразовать строку в ее ближайший эквивалент с помощью символов ASCII.

Например:

Łódź => Лодзь
Assunção => Assuncao
Шлосс => Шлосс

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

Может ли кто-нибудь привести небольшой пример того, как это можно сделать?
спасибо.

Ответы [ 5 ]

3 голосов
/ 13 ноября 2008

Попробуй это, ucnv_convert ("US-ASCII", "UTF-8", targer, targetize, source, sourcesize, pError)

3 голосов
/ 07 октября 2008

Я не знаю об ICU, но ICONV делает это, и его довольно легко выучить. это всего лишь 3-4 звонка, и вам нужно использовать флаг ICONV_SET_TRANSLITERATE, используя iconvctl().

1 голос
/ 07 октября 2009

Я написал обратный вызов, который разлагает, а затем выполняет некоторую замену. Вероятно, это может быть реализовано как транслитерация. код здесь decompcb.c и заголовок рядом. Установите его следующим образом на конвертер Unicode-to-ASCII:

ucnv_setFromUCallBack(gConverter, &UCNV_FROM_U_CALLBACK_DECOMPOSE, &status);

затем используйте gConverter для конвертации из Unicode в ASCII

0 голосов
/ 07 октября 2008

Разложение ß-> ss говорит мне, что вы хотите разложение совместимости. В ICU вам нужен класс Normalizer для этого. После этого у вас будет что-то вроде L'odz '. Из этой строки вы можете просто удалить не-ASCII символы. Нет необходимости в ICU, подойдет обычный STL.

0 голосов
/ 07 октября 2008

Это не та область, в которой я являюсь экспертом, но если у вас нет удобной библиотеки, которая сделает это для вас легко, то вам может быть лучше просто создать справочную таблицу / карту, которая содержит UTF- 8 -> значения ASCII. то есть. Ключ - символ UTF-8, значение - последовательность символов ASCII.

...