在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...
行做什么我不是?
我最初是如何获取线路的?或者它完全是另一回事?
答案 0 :(得分:1)
UTF-8是一个多字节字符集(see wikipedia),这意味着某些字符需要多个字节(您遇到的重音字节)。 C的char
类型是单个字节,因此C的“字符”定义与Unicode不匹配。
如果您想使用标准C RTL读取Unicode,您还需要使用Unicode转换库,例如libiconv。
(使用wchar_t也可以工作;我从未研究过它。)
或者您可以使用已支持Unicode的NSString。