
之前写过一篇文章一文理解字符串编码,有读者发邮件给我说某个地方出错了,我检查并且修改了之后,同时也发现了国内转换工具的字符串转 UTF-8 的错误。
“你”的 Unicode 编码是 U+4f60,经过转换规则转换成 UTF-8 应该是三个字节 e4bda0,你可以通过 python3 进行验证:
'>>> '你'.encode('utf-8') b'\xe4\xbd\xa0' 不过我发现大部分的中文在线转换网站(我选择搜索引擎的前 10 位)无一例外显示的转换结果都是你,这是“你“的 Html 实体编码,转换方式是&#x 加上“你”的 Unicode 编码,根本不是它的 UTF-8 编码。这些转换工具都把这个混淆了。相反,用英文搜索得到的转换网站都能给出正确的结果。好吧,我知道为什么大部分人不了解字符串编码了,Doge。

1 ysc3839 2018 年 5 月 11 日 大概是因为这类转换网站的主要目的是赚广告费?所以就直接抄别的网站了。 |
2 wssgcg1213 2018 年 5 月 11 日 via iPhone 你是有多不理解 unicode ? unicode 只描述了一套码点,标准中还有标准平面和扩展平面之分,但是每一个字符只对应一个码点。 utf8 描述的是存储码点使用的编码格式,是一种可变长度的编码格式,描述的方法具体可以参考 wiki。 所以你例子里面的 utf8 没错,unicode 是 0x4f60 也没错 |
3 wssgcg1213 2018 年 5 月 11 日 via iPhone @wssgcg1213 好吧我看岔了 |
4 Windsooon OP @wssgcg1213 我不确定我理解你的意思,utf8 是 unicode 的存储实现,“你”的 unicode 编码是两个字节的 4f60,它对应的 utf-8 是经过规则转换的 e4bda0。不会还是 4f60。 |