【问题标题】:stringWithCString:encoding: returned nil, when the input cstring contains emojistringWithCString:encoding: 返回 nil,当输入 cstring 包含表情符号时
【发布时间】:2013-10-16 09:33:57
【问题描述】:

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

这几天一直被困。

有什么想法吗?

非常感谢!!

【问题讨论】:

    标签: ios c nsstring null emoji


    【解决方案1】:

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

    【讨论】:

    • @Edward:不,编码无关紧要。如果您有任何编码不正确的数据,也会出现同样的问题。问题是您首先从哪里获得这些字节;您以错误的方式编码某些内容。
    • @newacct 这些是 CESU-8 / 修改后的 UTF-8 序列,其中 UTF-16 代理以 UTF-8 编码。
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多