1

我的代码

char* tmp = "abc \x80 dfg";
NSString* name = [[NSString alloc] initWithUTF8String:tmp]; 

它返回namenil. 我知道-initWithUTF8String:方法不喜欢我的扩展 ascii \x80 (欧元符号)。我尝试-initWithCString:使用所有可能的编码。没有任何效果。

有趣的是,下面的 Apple 示例代码可以正常工作

 [NSString stringWithUTF8String:"Long \xe2\x80\x94   dash"];

我不知道如何使用他们的方法。任何帮助将非常感激。

4

3 回答 3

4

U+0080 是无效的 Unicode 代码点(欧元符号是 U+20AC)。它在 Windows CP-1252 中有效(和欧元符号),但是:

NSString* name = [[NSString alloc] initWithCString:tmp encoding:NSWindowsCP1252StringEncoding]; 

(Apple 的代码有效的原因是 UTF-8 字符以字节表示的方式。)

于 2011-03-30T20:32:57.617 回答
1

€ 的 UTF-8 代码是三个字节长,它是:\xe2\x82\xac。

对于 Unicode 代码点和 UTF-8 之间的转换,您可以使用以下站点:http ://www.utf8-chartable.de/unicode-utf8-table.pl 。我从维基百科获取了欧元符号的代码点。

于 2011-03-30T20:33:39.413 回答
1

€ 的 C99 \u 字符转义是\u20ac

因此,1.99 欧元将是:

NSString *euroString = [NSString stringWithUTF8String:"\u20ac1.99"];

另请查看此以获取更多信息:在 NSString 中使用 UTF-32

于 2012-10-20T00:03:35.417 回答