2011-03-27 86 views
0

我在将字符串转换为可读的问题时遇到了问题。我使用NSString unicode编码问题

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

,但我不能转换\ U7ab6 \ U51b1成“

它显示为窭冱这是我不想要的东西,它应该显示为”。谁能帮我?

+0

?字符U + 7AB6是窭,U + 51B1绝对是冱。那个序列如何代表撇号? – bobince 2011-03-27 11:33:41

+0

嗨bobine,它不是一个撇号,但看起来像一个。我从一个word文档粘贴到这里,第一个是撇号'它被显示为'并且由\ U7ab6 \ U51b1的组合创建。我只是希望它显示为' – munchine 2011-03-27 23:18:08

回答

3

它被示出为”

这是字符U + 2019右单引号。

发生了什么事是你已经提交给你,在UTF-8编码的字符序列’s,其散发出来的字节:

’   s 
E2 80 99 73 

该字节序列的话,不正确,被解释就好像它是在Windows代码页932进行编码(日语;或多或少移位-JIS):

E2 80 99 73 
窶  冱 

因此,在这一个特定情况下,可以通过首先将编码字符转换成CP932字节恢复’s串,然后装饰将这些字节转换回使用UTF-8的字符。

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

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