1

这是故事。我正在使用 C lib 进行数据传输,除了某些表情符号外,一切都运行良好。对于接收方,接收到的消息是char *message,可以使用“ printf ”打印出正确的内容。但是当使用stringWithCString:encoding:(或stringWithUTF8String:等)时,它会为某些表情符号返回 nil。

所以,我打印出每个字符,这里是成功的表情符号:

"\xe2\x9a\xbd"

"\xe2\x9a\xbe\xef\xb8\x8f"

"\xe2\x98\x81\xef\xb8\x8f"

但失败的表情符号:

"\xed\xa0\xbc\xed\xbe\x82"

"\xed\xa0\xbc\xed\xbf\x80"

"\xed\xa0\xbc\xed\xbc\x88"

这几天一直卡着。

有任何想法吗?

非常感谢!!

4

1 回答 1

1

这是因为您的字节不是有效的 UTF-8 编码字符串。根据UTF-8,"\xed\xa0\xbc" 编码 Unicode 代码点 U+D83C。这是高代理块中的代码点。代理不是有效字符,是为 UTF-16 目的而保留的。UTF-8 对此类代码点进行编码是无效的。

于 2013-10-19T08:07:23.387 回答