我们有多不理解字符串编码

2018-05-11 14:10:12 +08:00
 Windsooon

之前写过一篇文章一文理解字符串编码,有读者发邮件给我说某个地方出错了,我检查并且修改了之后,同时也发现了国内转换工具的字符串转 UTF-8 的错误。

字符串转 UTF-8

“你”的 Unicode 编码是 U+4f60,经过转换规则转换成 UTF-8 应该是三个字节 e4bda0,你可以通过 python3 进行验证:

'>>> '你'.encode('utf-8')
b'\xe4\xbd\xa0'

不过我发现大部分的中文在线转换网站(我选择搜索引擎的前 10 位)无一例外显示的转换结果都是&#x4F60,这是“你“的 Html 实体编码,转换方式是&#x 加上“你”的 Unicode 编码,根本不是它的 UTF-8 编码。这些转换工具都把这个混淆了。相反,用英文搜索得到的转换网站都能给出正确的结果。好吧,我知道为什么大部分人不了解字符串编码了,Doge。

2319 次点击
所在节点    程序员
4 条回复
ysc3839
2018-05-11 14:23:38 +08:00
大概是因为这类转换网站的主要目的是赚广告费?所以就直接抄别的网站了。
wssgcg1213
2018-05-11 22:34:14 +08:00
你是有多不理解 unicode ?

unicode 只描述了一套码点,标准中还有标准平面和扩展平面之分,但是每一个字符只对应一个码点。

utf8 描述的是存储码点使用的编码格式,是一种可变长度的编码格式,描述的方法具体可以参考 wiki。

所以你例子里面的 utf8 没错,unicode 是 0x4f60 也没错
wssgcg1213
2018-05-11 22:35:33 +08:00
@wssgcg1213 好吧我看岔了
Windsooon
2018-05-12 01:56:44 +08:00
@wssgcg1213 我不确定我理解你的意思,utf8 是 unicode 的存储实现,“你”的 unicode 编码是两个字节的 4f60,它对应的 utf-8 是经过规则转换的 e4bda0。不会还是 4f60。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/454054

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX