2011-03-30 49 views
1

我的代码NSString的编码问题

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

它返回namenil。我明白-initWithUTF8String:方法不喜欢我的extended-ascii \ x80(欧元符号)。我试图用-initWithCString:来玩所有可能的编码。什么都没有下面

有趣的是苹果的示例代码工作正常

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

我无法弄清楚如何使用他们的方法。任何帮助将非常感激。

回答

4

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

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

(原因苹果公司的代码工作是因为UTF-8字符的字节表示的方式。)

1

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

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

1

为€这C99 \ü字符转义为\ u20ac

所以€1.99将是:

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

还检查了这一点的详细信息:using UTF-32 in NSString