这是故事。
我正在使用C库进行数据传输,除某些表情符号外,其他所有功能都运行良好。
对于接收者,接收到的消息是 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”

这几天一直被困住。

有任何想法吗?

非常感谢!!

最佳答案

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

10-06 07:09