UTF-8 -> ASCII на языке Си - PullRequest
       6

UTF-8 -> ASCII на языке Си

5 голосов
/ 15 сентября 2010

У меня есть простой вопрос, который я нигде не могу найти в Интернете. Как я могу преобразовать UTF-8 в ASCII (в основном символы с акцентом в один и тот же символ без акцента) в C, используя только стандартную библиотеку lib?Я нашел решения для большинства языков, но не для C, в частности.

Спасибо!

РЕДАКТИРОВАТЬ: Некоторые добрые парни, которые прокомментировали, заставили меня дважды проверить, что мне нужно, и я преувеличил,Мне нужно только представление о том, как сделать функцию, которая выполняет: char с ударением -> char без ударения.:)

Ответы [ 5 ]

5 голосов
/ 15 сентября 2010

Взгляните на libiconv .Даже если вы настаиваете на том, чтобы делать это без библиотек, вы можете найти там вдохновение.

4 голосов
/ 15 сентября 2010

В общем, вы не можете. UTF-8 охватывает гораздо больше, чем акцентированные символы.

2 голосов
/ 16 сентября 2010

Так как это домашнее задание, я предполагаю, что ваш учитель ничего не знает и ничего не знает о UTF-8, и, вероятно, застрял в 1980-х с «кодовыми страницами» и «расширенным ASCII» (словами, которые вы должны стеретьваш словарный запас, если вы еще не сделали).Ваш учитель, вероятно, хочет, чтобы вы написали 128-байтовую таблицу поиска, которая сопоставляет байты CP437 или Windows-1252 в диапазоне 128-255 с похожими буквами ASCII.Было бы что-то вроде ...

void strip_accents(unsigned char *dest, const unsigned char *src)
{
    static const unsigned char lut[128] = { /* mapping here */ };
    do {
        *dest++ = *src < 128 ? *src : lut[*src];
    } while (*src++);
 }
2 голосов
/ 16 сентября 2010

Каждая приличная библиотека поддержки Unicode (конечно, не стандартная библиотека) имеет способ разложить строку в форме KC или KD. Который отделяет диакритические знаки от букв. Даем вам шанс отфильтровать их. Не уверен, что это стоит того, чтобы его преследовать, результат - просто бред для читателя на родном языке, и не каждое письмо разложимо. Другими словами, мусор с вопросительными знаками.

2 голосов
/ 15 сентября 2010

Нет встроенного способа сделать это. Между UTF-8 и ASCII действительно мало различий, если только вы не говорите о высокоуровневых символах, которые все равно не могут быть представлены в ASCII.

Если у вас есть конкретное отображение, которое вы хотите (например, с ударением -> a), то вам, вероятно, следует обработать это как операцию замены строки.

...