当前位置:  开发笔记 > IOS > 正文

为什么表情符号有两个不同的utf-8代码?如何从utf-8转换表情符号,在ios中使用NSString?

如何解决《为什么表情符号有两个不同的utf-8代码?如何从utf-8转换表情符号,在ios中使用NSString?》经验,为你挑选了1个好方法。

我们发现了一个问题,一些表情符号有两个utf-8代码,例如:

emoji   unicode    utf-8                another utf-8
      U+1F601    \xf0\x9f\x98\x81     \xed\xa0\xbd\xed\xb8\x81

但是ios语言无法解码其他类型的utf-8,因此当我从utf-8解码字符串时会产生错误.

ios代码


在我找到的所有文档中,我只能为表情符号找到一种类型的utf-8代码,无处找到另一种代码.

我引用的文件包括:

表情符号代码链接

整个utf-8代码链接

但是在web工具bianma中,所有两种类型的utf-8代码都可以正确转换为表情符号.

输入代码

输出中


所以,我的问题是:

    为什么一个表情符号有两种类型的utf-8代码?

    哪个文件包含两种类型的utf-8代码?

    如何使用ios语言中的NSString正确转换utf-8中的字符串?

bobince.. 12

0xF0,0x9F,0x98,0x81

是否为U + 1F601的正确UTF-8编码.

0xED,0xA0,0xBD,0xED,0xB8,0x81

不是有效的UTF-8序列(*).它应该被拒绝; iOS是正确的.

这是bianma工具中的一个错误:该convertUtf8BytesToUnicodeCodePoints函数对于它接受的输入比例如RFC 3629中的指定算法更宽松.

这恰好返回一个工作字符串,因为该工具是用JavaScript编写的.已经解码的上述字节序列与伪代理码点序列U + D83D,U + DE01它然后转换该成JavaScript字符串使用直接码点到代码单元映射给予\uD83D\xDE01.由于这是以UTF-16字符串编码的正确方法,因此它似乎有效.

(*:它一个有效的CESU-8序列,但是这种编码只是"与编写错误的历史工具兼容的伪造破坏编码",通常应该避免.)

你不应该经常遇到这样的序列; 它通常不值得用餐,除非你有这种格式错误的数据的特定来源,你没有权力得到修复.



1> bobince..:

0xF0,0x9F,0x98,0x81

是否为U + 1F601的正确UTF-8编码.

0xED,0xA0,0xBD,0xED,0xB8,0x81

不是有效的UTF-8序列(*).它应该被拒绝; iOS是正确的.

这是bianma工具中的一个错误:该convertUtf8BytesToUnicodeCodePoints函数对于它接受的输入比例如RFC 3629中的指定算法更宽松.

这恰好返回一个工作字符串,因为该工具是用JavaScript编写的.已经解码的上述字节序列与伪代理码点序列U + D83D,U + DE01它然后转换该成JavaScript字符串使用直接码点到代码单元映射给予\uD83D\xDE01.由于这是以UTF-16字符串编码的正确方法,因此它似乎有效.

(*:它一个有效的CESU-8序列,但是这种编码只是"与编写错误的历史工具兼容的伪造破坏编码",通常应该避免.)

你不应该经常遇到这样的序列; 它通常不值得用餐,除非你有这种格式错误的数据的特定来源,你没有权力得到修复.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有