繁体   English   中英

字符串编码和表情符号出现问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM