unicode - 0xdcf0 的 UTF16 BIG ENDIAN 到 UTF8 转换失败
问题描述
我正在尝试将 UTF16 转换为 UTF8。对于字符串 0xdcf0,转换失败,多字节序列无效。我不明白为什么转换失败。在我用来进行 utf-16 到 utf-8 转换的库中,有一个检查
if (first_byte & 0xfc == 0xdc) {
return -1;
}
你能帮我理解为什么会出现这个检查吗?
解决方案
范围内的Unicode 字符DC00–DFFF
是“低”代理,即在 UTF-16 中用作代理对的第二部分,第一部分是范围内的“高”代理字符D800–DBFF
。
有关更多信息,请参见例如 Wikipedia 文章UTF-16。
您无法转换为 UTF-8 的原因是您只有半个 Unicode 代码点。