之前写过一篇文章一文理解字符串编码,有读者发邮件给我说某个地方出错了,我检查并且修改了之后,同时也发现了国内转换工具的字符串转 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-05-11 14:23:38 +08:00
大概是因为这类转换网站的主要目的是赚广告费?所以就直接抄别的网站了。
|
2
wssgcg1213 2018-05-11 22:34:14 +08:00 via iPhone
你是有多不理解 unicode ?
unicode 只描述了一套码点,标准中还有标准平面和扩展平面之分,但是每一个字符只对应一个码点。 utf8 描述的是存储码点使用的编码格式,是一种可变长度的编码格式,描述的方法具体可以参考 wiki。 所以你例子里面的 utf8 没错,unicode 是 0x4f60 也没错 |
3
wssgcg1213 2018-05-11 22:35:33 +08:00 via iPhone
@wssgcg1213 好吧我看岔了
|
4
Windsooon OP @wssgcg1213 我不确定我理解你的意思,utf8 是 unicode 的存储实现,“你”的 unicode 编码是两个字节的 4f60,它对应的 utf-8 是经过规则转换的 e4bda0。不会还是 4f60。
|