我在将字符串转换为可读的内容时遇到了问题。我正在使用
NSString *substring = [NSString stringWithUTF8String:[symbol.data cStringUsingEncoding:NSUTF8StringEncoding]];
但我无法将\ U7ab6 \ U51b1转换为'
它显示为窭冱,这是我不想要的,它应该显示为'。任何人都可以帮助我吗?
答案 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。