gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 10:36:31 26 4
gpt4 key购买 nike

我们发现了一个问题,一些表情符号有两个 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 code


在我找到的所有文档中,我只能找到一种表情符号的 utf-8 代码,找不到其他类型。

我引用的文件包括:

emoji code link

whole utf-8 code link

但是在网络工具中bianma ,这两种utf-8编码都可以正确转换成emoji。

input code

ouput


所以,我的问题是:

  1. 为什么一个emoji有两种utf-8编码?

  2. 哪里有包含这两种utf-8编码的文档?

  3. 如何在 ios 语言中使用 NSString 正确地从 utf-8 转换字符串?

最佳答案

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 序列,但该编码只是“为了与编写错误的历史工具兼容而伪造的损坏编码”,通常应该避免。)

你通常不会遇到这样的序列;它通常不值得迎合,除非您有这种格式错误的数据的特定来源,而您无力修复。

关于ios - 为什么 emoji 有两个不同的 utf-8 编码?如何从 utf-8 转换表情符号,在 ios 中使用 NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34409085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com