在 objective-c/cocoa 应用程序中,我使用 c 函数打开一个文本文件,逐行读取它并在第三方函数中使用一些行。在伪代码中:
char *line = fgets(aFile);
library_function(line); // This function calls for a utf-8 encoded char * string
在输入文件包含特殊字符(例如重音符号或 UTF-8 BOM)之前,此方法工作正常,此时库函数输出错位字符。
但是,如果我这样做:
char *line = fgets(aFile);
NSString *stringObj = [NSString stringWithUTF8String:line];
library_function([stringObj UTF8String]);
然后一切正常,字符串输出正确。
那个 [NSString...
行是做什么的,我不是?
我是不是对最初获取该行的方式做错了什么?还是完全不同?
最佳答案
UTF-8 是一个多字节字符集 ( see wikipedia ),这意味着某些字符需要多个字节(您遇到过的重音字符)。 C 的 char
类型是单字节,因此 C 对“字符”的定义与 Unicode 不匹配。
如果您想使用标准 C RTL 读取 Unicode,您还需要使用 Unicode 转换库,例如 libiconv .
(使用 wchar_t 也可能有效;我从未研究过它。)
或者你可以使用已经支持 Unicode 的 NSString。
关于c - 在c/cocoa中读取和输出UTF-8字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2117449/