NSString unicode编码问题

时间:2011-03-27 05:18:37

标签: iphone unicode encoding nsstring

我在将字符串转换为可读的内容时遇到了问题。我正在使用

NSString *substring = [NSString stringWithUTF8String:[symbol.data cStringUsingEncoding:NSUTF8StringEncoding]];

但我无法将\ U7ab6 \ U51b1转换为'

它显示为窭冱,这是我不想要的,它应该显示为'。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

  

显示为'

这是U + 2019正确的单引号。

发生了什么事情是你用UTF-8编码提交给你的字符序列’s,它以字节形式出现:

’          s
E2 80 99   73

然后错误地将该字节序列解释为在Windows代码页932(日语;或多或少的Shift-JIS)中编码:

E2 80    99 73
窶        冱

因此,在这种特殊情况下,您可以通过首先将字符编码为cp932字节,然后使用UTF-8将这些字节解码回字符来恢复’s字符串。

然而,这并不能解决您的真正问题,即首先错误地读取字符串。在这种情况下,您得到窶冱,因为编码’s产生的UTF-8字节序列也是有效的Shift-JIS字节序列。但是,对于您可能获得的所有可能的UTF-8字节序列,情况并非如此。许多其他角色将无法修复。

您需要找到将字节读入系统并将其解码为Shift-JIS的位置,并将其修改为使用UTF-8。