阮一峰的文章有哪些常见性错误

2017-02-27 20:48:40 +08:00
 lzjun

比如《字符编码笔记: ASCII , Unicode 和 UTF-8 》 是阮老师 10 年前写的一篇关于字符编码的科普文章,现在用 Google 搜关键字该文章依然名列前茅,可见他的文章有多大影响力,但里面的内容是否正确是值得商榷的事。

中文维基百科对 Unicode 的解释也是让人一头雾水,摸不着头脑。看看阮老师怎么说:

可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是 Unicode ,就像它的名字都表示的,这是一种所有符号的编码。

这句话读起来很拗口,有三个地方出现了「编码」二字。不知阮老师对「编码」的理解是什么?但可以肯定的是这三个「编码」在这句话里面不是同一个意思。

「编码」作动词使用时就是把一个字符(严格一点说是字符在字符集中的编号 code point )转换成一个字节序列,以便在网络传输或者存储到文本中。比如「好」在 Unicode 中的编号是 U+597d ,经过 UTF-8 编码后会转换成二进制序列是 '\xe5\xa5\xbd' 。作为名词使用时,就是指一种具体的编码实现方式,比如 ASCII 编码, GBK 编码, UTF-8 编码

其实 Unicode 是一个囊括了世界上所有字符的字符集,其中每一个字符都对应有唯一的编码值( code point ),然而它并不是一种什么编码格式,仅仅是字符集而已。 Unicode 字符要存储要传输怎么办,它不管,可以用 UTF-8 、 UTF-16 。

再来看阮老师说 Unicode 的第二个问题:

第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是 0 ,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

Unicode 并没有统一规定每个符号用三个或者四个字节表示。 Unicode 只规定了每个字符对应到唯一的代码值( code point ),代码值 从 0000 ~ 10FFFF 共 1114112 个值 ,真正存储的时候需要多少个字节是由具体的编码格式决定的。比如:字符 「 A 」用 UTF-8 的格式编码来存储就只占用 1 个字节,用 UTF-16 就占用 2 个字节,而用 UTF-32 存储就占用 4 个字节。

再看来看这张图:

阮老师对 Unicode 编码的解释是:

Unicode 编码指的是 UCS-2 编码方式,即直接用两个字节存入字符的 Unicode 码。这个选项用的 little endian 格式。

UCS-2 是什么鬼, UCS-2 是使用两个定长的字节来表示一个字符,而 UTF-16 是使用两个变长的字节,遇到两个字节没法表示时,会用 4 个字节来表示,因此 UTF-16 可以看作是在 UCS-2 的基础上扩展而来的。而 UTF-32 与 USC-4 是完全等价的。

之所以在 Windows 下有 Unicode 编码这样一种说法,其实是 Windows 的一种错误表示方法,它真正的编码类型是 UTF-16LE 编码。

他又说:

Unicode 规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"( ZERO WIDTH NO-BREAK SPACE ),用 FEFF 表示。这正好是两个字节,而且 FF 比 FE 大 1 。

如果一个文本文件的头两个字节是 FE FF ,就表示该文件采用大头方式;如果头两个字节是 FF FE ,就表示该文件采用小头方式

这儿就错得更加离谱了,不想说了,直接原文链接 http://mp.weixin.qq.com/s?__biz=MjM5MzgyODQxMQ==&mid=2650366798&idx=1&sn=5db3b152c99ff96f7a477313cfb175e0&chksm=be9cd81a89eb510c1d22091d89df648ab689a01fd77ebd4361567dd7ec238e754c3d5f10715c&mpshare=1&scene=23&srcid=0227ViQqcIpvWmVwkOiYxyxT#rd

18252 次点击
所在节点    程序员
115 条回复
taozhijiangscu
2017-02-28 09:24:40 +08:00
世上人无完人,博客有错误在所难免

随着自己的成长,肯定会发现自己之前的博文有疏漏或者不完整,保持着维持项目的态度,常常对自己的博客进行修正完善,是对阅读者的尊重和负责

所以,现在自己的博客也都申明别人除了标题+链接外,不允许全文转载,这样确保大家能看到的就确保是当前最新状态的文章

不过百度几乎没有在搜索中展示我的网站 (*Φ皿Φ*)
anthozoan77
2017-02-28 09:35:35 +08:00
这只是代表了别人十年前的理解和想法,何必呢?
clino
2017-02-28 09:41:59 +08:00
"这句话读起来很拗口,有三个地方出现了「编码」二字。不知阮老师对「编码」的理解是什么?但可以肯定的是这三个「编码」在这句话里面不是同一个意思。"
你是一下你理解的意思都是什么? 我咋没看出来呢? 感觉都是一个意思啊.
taoxin167
2017-02-28 09:45:35 +08:00
从来否认自己短处,一昧放大别人错误
Sh888
2017-02-28 09:46:56 +08:00
正确做法不应该是学好英语看白皮书么?
fulvaz
2017-02-28 09:50:25 +08:00
一年前还是小白的我非常崇拜阮一峰老师, 因为我先学习的内容几乎都有阮一峰老师的身影, 直到我读了<如何变得有思想> 我觉得, 以后看任何人都要冷静

事实上任何人都不应该被当成权威, 这句话是我浪费三年的时间得到的教训 (我指另一件事情
xiaonengshou
2017-02-28 09:57:30 +08:00
阮老师在技术上的段位并不是很高,参照他在蚂蚁的段位就可以了,但是他写的 es6 指南等等确实是很好地书籍,看一看很好,见仁见智吧,有时间的话就发个邮件给他呗,我想他肯定会回复了。
peinhu
2017-02-28 10:03:09 +08:00
阮一峰说不上大牛但至少对待知识的态度是很好的,而且也乐于分享,挺实在的一个人。楼主不要太吹毛求疵了,人无完人,多一点包容吧,想想现在有多少人还愿意费时费力不收钱跟你分享知识?
21grams
2017-02-28 10:06:16 +08:00
中文互联网上,真正愿意写一些入门级的文章的人太少,更多的人只是热衷于写一些高大上的没多少人看的懂的文章,阮一峰能够花时间写这样的入门文章,我觉得功德无量。
DinoStray
2017-02-28 10:21:50 +08:00
这样咬文嚼字大家谁也不敢写技术博客了
stranbird
2017-02-28 10:22:16 +08:00
阮一峰最好的地方是一开始说的东西小白能看得懂,整理得也相对全面。即使有错误,也不妨碍小白进入那个领域,继续研究。

中文社区这样子的博主已经太少了,大多数搜出来只有解决一个特定问题的。比如你真的说搜 utf8mb4 那个,给小白讲只是在给他们增加认知上的负担。

我觉得一个良性的互联网知识生态应该是有很多阮老师这样的“小学老师”,也有很多深入研究某个领域的“大学教授”。
jsq2627
2017-02-28 10:25:15 +08:00
coderzheng
2017-02-28 10:27:18 +08:00
其实我想说一个问题,如果阮老师的博客在业界没有什么名气,估计说他的人就微乎其微吧。所以人怕成名猪怕壮,阮老师也是凡夫俗子,写的文章有点错误在所难免, LZ 不必较真。
hqfzone
2017-02-28 10:38:32 +08:00
闲的
xi2008wang
2017-02-28 10:42:06 +08:00
都是定义问题:
unicode
可以指单个字符的编码值(重点 值)
可以指上述所有这样字符的集合(重点 字符集)
可以是字符到编码的映射规则 (重点 对应规则)
所以说单说 unicode 就是耍流氓
btjoker
2017-02-28 10:46:54 +08:00
吃饱没事干,啥事都要来批判
stabc
2017-02-28 10:48:04 +08:00
大海航行靠舵手,写程序靠阮老师启蒙!
LZ ,人民的眼睛是雪亮的,你妄图污蔑、诋毁、诽谤伟大导师阮老师,以及煽动、拱火、挑拨程序员内部矛盾的罪恶行径已经败露,你即使在附言中道歉也没用,反而更加说明了你是个无比阴险的投机分子。你现在要坦白交代,你到底什么目的?背后主使是谁?得到了什么好处?
你必将接受人民的审判,被永远的钉在历史的耻辱柱上!!!!
FrankHB
2017-02-28 10:54:05 +08:00
@FrankFang128 然而错误也不限于单一的专业领域。
比如我记得之前有著作权的理解上的低级错误,总算评论里有人指出了。
考虑到相关的坑不少还不总是那么容易被读者发现,提醒提防一下还是有必要的。
FrankHB
2017-02-28 10:55:45 +08:00
@coderzheng 作为读者,希望内容质量能和名气正相关,节约点时间。
作为懂行的那部分相关领域的读者,希望能正经科普少添乱。
huson
2017-02-28 11:00:01 +08:00
虽然 ruan 老师的 博客帮助了很多新手
但是楼主只是指出了其中的错误 我觉得没什么不对呀
有错就改不就行了
扯什么名气啥的

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

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

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

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

© 2021 V2EX