这是故事。
我正在使用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编码此类代码点无效。