这是故事。 我正在使用C lib进行数据传输,除了某些表情符号外,所有工作都很好。 对于接收者,收到的消息是 char * message ,为此可以使用“ printf ”打印出正确的内容。但是当使用 stringWithCString:encoding:(或 stringWithUTF8String:等)时,它会为某些表情符号返回nil。
所以,我打印出每个char,这里是成功的表情符号:
“\ XE2 \ x9a \ XBD”
“\ XE2 \ x9a \ XBE \ XEF \ XB8 \ X8F”
“\ XE2 \ X98 \ X81 \ XEF \ XB8 \ X8F”
但失败的表情符号:
“\固定的\ XA0 \ XBC \固定的\ XBE \ X82”
“\固定的\ XA0 \ XBC \固定的\ XBF \ X80”
“\固定的\ XA0 \ XBC \固定的\ XBC \ X88”
这几天一直困扰着。
任何想法?
非常感谢!!
答案 0 :(得分:1)
这是因为您的字节不是有效的UTF-8编码字符串。根据{{3}},“\ xed \ xa0 \ xbc”对Unicode代码点U + D83C进行编码。这是高代理块中的代码点。代理不是有效字符,保留用于UTF-16目的。 UTF-8无法对此类代码点进行编码。