2010-01-22 23 views
1

在objective-c/cocoa應用程序中,我使用c函數打開文本文件,逐行讀取並在第三方中使用一些行功能。在僞碼:在c/cocoa中讀取和輸出UTF-8字符串

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

UTF-8是一個多字節字符集(see wikipedia),這意味着某些字符需要多個字節(您遇到的重音字符)。 C的char類型是一個單字節,所以C的「字符」定義與Unicode的不匹配。

如果要使用標準C RTL讀取Unicode,則還需要使用Unicode轉換庫,如libiconv

(使用wchar_t的也可正常工作;我從來沒有研究它。)

或者你可以使用NSString,它已經支持Unicode。