stringWithCString:encoding:当输入cstring包含表情符号时返回nil

时间:2013-10-16 09:33:58

标签: ios c nsstring null emoji

这是故事。 我正在使用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”

这几天一直困扰着。

任何想法?

非常感谢!!

1 个答案:

答案 0 :(得分:1)

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