首页 > 解决方案 > 0xdcf0 的 UTF16 BIG ENDIAN 到 UTF8 转换失败

问题描述

我正在尝试将 UTF16 转换为 UTF8。对于字符串 0xdcf0,转换失败,多字节序列无效。我不明白为什么转换失败。在我用来进行 utf-16 到 utf-8 转换的库中,有一个检查

if (first_byte & 0xfc == 0xdc)  {
   return -1;
}

你能帮我理解为什么会出现这个检查吗?

标签: unicode

解决方案


范围内的Unicode 字符DC00–DFFF是“低”代理,即在 UTF-16 中用作代理对的第二部分,第一部分是范围内的“高”代理字符D800–DBFF

有关更多信息,请参见例如 Wikipedia 文章UTF-16

您无法转换为 UTF-8 的原因是您只有半个 Unicode 代码点


推荐阅读