[英]Trouble with string encoding and emoji
我在从服务器检索某些文本消息时遇到了一些麻烦,尤其是在编码方面。 消息可以来自多种语言(因此,它们可以带有重音符号,日语),并且可以包含表情符号。
我正在使用带有一些信息的JSON
检索消息。 这是一些日志示例:
(lldb) po dataMessages
<__NSCFArray 0x14ecc7f0>(
{
author = "User 1";
text = "Hier, c'\U00c3\U00a9tait incroyable";
},
{
...
}
)
(lldb) po [[dataMessages objectAtIndex:0] objectForKey:@"text"]
Hier, c'était incroyable
我可以使用来获取正确的文本:
const char *c = [[[dataMessages objectAtIndex:indexPath.row] objectForKey:@"text"] cStringUsingEncoding:NSWindowsCP1252StringEncoding];
NSString *myMessage = [NSString stringWithCString:c encoding:NSUTF8StringEncoding];
但是,如果消息包含表情符号,则cStringUsingEncoding:
返回NULL
值。
我在服务器上没有控制权,因此在向我发送消息之前,我无法更改其编码。
问题是正确确定编码。 表情符号不是NSWindowsCP1252StringEncoding的一部分,因此转换失败。
而且,您正在经历不必要的阶段。 不要制作中间的C字符串! 只需调用NSString的initWithData:encoding:
。
就您而言,调用NSWindowsCP1252StringEncoding总是一个错误; 我很惊讶这对于任何字符串都有效。 C3A9是Unicode(UTF8)。 因此,只要从一开始就使用intWithUTF8编码(NSUTF8StringEncoding)调用initWithData:encoding:
就可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.