1

在一个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...线在做什么而我不是?我在最初获取线路的方式上做错了吗?还是完全是别的东西?

4

1 回答 1

2

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

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

(使用 wchar_t 也可能有效;我从未研究过它。)

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

于 2010-01-22T14:50:39.970 回答