Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取和输出c/c格式的UTF-8字符串_C_Cocoa_Utf 8_Fgets - Fatal编程技术网

读取和输出c/c格式的UTF-8字符串

读取和输出c/c格式的UTF-8字符串,c,cocoa,utf-8,fgets,C,Cocoa,Utf 8,Fgets,在objective-c/cocoa应用程序中,我使用c函数打开文本文件,逐行读取,并在第三方函数中使用一些行。在psuedo代码中: char *line = fgets(aFile); library_function(line); // This function calls for a utf-8 encoded char * string 在输入文件包含特殊字符(如重音符号或UTF-8 BOM)之前,此操作可以正常工作,因此库函数将输出损坏的字符 但是,如果我这样做: char

在objective-c/cocoa应用程序中,我使用c函数打开文本文件,逐行读取,并在第三方函数中使用一些行。在psuedo代码中:

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]);
然后一切正常,字符串输出正确


那一行我没有做的是什么?
我在最初获取行的方式上是否有问题?或者完全是其他原因吗?

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

如果希望使用标准C RTL读取Unicode,还需要使用Unicode转换库,例如

(使用wchar\u t也可能有效;我从未研究过它。)

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