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

标签 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... 行是做什么的,我不是? 我是不是对最初获取该行的方式做错了什么?还是完全不同?

最佳答案

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/

相关文章:

c++ - 在 C 和 C++ 中的函数指针和对象指针之间转换

objective-c - 使用 NSImage 的垃圾收集崩溃

objective-c - 过滤 NSOutlineView 的内容

来自 Bridging-Header Obj-C++ 的 C++ header 问题

将 10 进制转换为 6 进制

c - C 中的按引用传递 - 缺点?

c - 是否可以通过 mmap 匿名内存访问 "punch holes"?

java - Java 中的 jTable 编码

php - PHP 中函数 md5() 的(默认)编码是什么?

PHP 突然出现以前不存在的 UTF8 编码问题。应用程序未更改