在c / cocoa中读取和输出UTF-8字符串

时间:2010-01-22 13:29:39

标签: c cocoa utf-8 fgets

在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...行做什么我不是? 我最初是如何获取线路的?或者它完全是另一回事?

1 个答案:

答案 0 :(得分:1)

UTF-8是一个多字节字符集(see wikipedia),这意味着某些字符需要多个字节(您遇到的重音字节)。 C的char类型是单个字节,因此C的“字符”定义与Unicode不匹配。

如果您想使用标准C RTL读取Unicode,您还需要使用Unicode转换库,例如libiconv

(使用wchar_t也可以工作;我从未研究过它。)

或者您可以使用已支持Unicode的NSString。