Чтение и вывод строк UTF-8 в какао - PullRequest
1 голос
/ 22 января 2010

В приложении target-c / cocoa я использую функции c, чтобы открыть текстовый файл, прочитать его построчно и использовать некоторые строки в сторонней функции. В псевдо-код:

char *line = fgets(aFile);
library_function(line);  // This function calls for a utf-8 encoded char * string

Это работает нормально, пока входной файл не содержит специальных символов (таких как акценты или спецификация UTF-8), после чего библиотечная функция выводит искаженные символы.


Однако, если я сделаю это:

char *line = fgets(aFile);
NSString *stringObj = [NSString stringWithUTF8String:line];
library_function([stringObj UTF8String]);

Тогда все работает нормально и строка выводится правильно.


Что это за линия [NSString..., которой я не являюсь? Я делаю что-то не так с тем, как линия извлекается изначально? Или это что-то совсем другое?

1 Ответ

1 голос
/ 22 января 2010

UTF-8 - это многобайтовый набор символов ( см. Википедию ), что означает, что некоторым символам требуется несколько байтов (с акцентированными, с которыми вы столкнулись). Тип C char представляет собой один байт, поэтому определение «символа» в языке C не соответствует определению Unicode.

Если вы хотите читать Unicode со стандартным RTL C, вам также необходимо использовать библиотеку преобразования Unicode, такую ​​как libiconv .

(Использование wchar_t также может работать; я никогда не исследовал его.)

Или вы можете использовать NSString, которая уже поддерживает Unicode.

...