一句话说清
计算机只分辨通与断,内容都是按约定拼出来的。
为什么值得懂
打开文件弹出乱码、老照片打不开,不是坏了,而是两边的约定没对上。懂了编码就明白,「文件」不过是一串 0 和 1 加一份约定。它也是《硬件与软件》的下一块砖。
零基础讲解
为什么偏偏是两种状态。 电路最容易稳定地做到通电与断电:分两档,噪声很难读错;分得越细,一点抖动就认不出来。多表示东西靠加位数,不是切细档位。佩措尔德在《编码》第 2 章用莫尔斯码说明同一件事。
位与字节。 位就是一个 0 或一个 1;8 位凑成 1 字节,能表示 256 种取值。
字符编码:从 ASCII 到 Unicode。 ASCII 用 7 位给 128 个字符编号,装不下汉字,各地只好各自扩展;同一个字节换个约定读出来就是别的字,这就是乱码。Unicode 先给每个字符一个编号,再规定它怎么变成字节:UTF-8 下英文字符占 1 字节,常用汉字占 3 字节。主流观点是它已是互联网默认约定。
图像与声音:都是采样。 图被切成密密麻麻的方格,每格记一组颜色数值;声音则每秒量几千到几万次波形高度,记成数字。格子越细、档位越多,越像真的。采样率要高过声音最高频率的两倍才能完整还原,这叫奈奎斯特—香农采样定理。
编码就是约定。 同一串字节,用 UTF-8 读是中文,用 GBK 读可能是怪字。字节里没写着「我是什么」,解释权在读取的一方,正像《编程思维》里说的接口。
一个例子
写下「中」字,按 UTF-8 它是 3 个字节:E4 B8 AD;同一串字节交给 GBK 去读,就成了另一个字甚至方块。文件一个字没改,变的是谁按哪本字典读。
常见误解
- 以为计算机真在算 0 和 1:它区分的是电压高低,0 和 1 只是名字。
- 以为乱码是文件坏了:多数只是读取时用错了约定。
- 以为编码只跟文字有关:图片与声音同样是采样。
应用场景
- 生活:遇到乱码就去改文件的编码设置,换一次往往就好。
- 职场:发文件优先用 UTF-8 纯文本或 PDF,约定越通用,对方出错越少。
- 写作与创作:别用全角空格凑排版,看不见的编码差异会变成怪字符。
关联知识点
- 硬件与软件(hardware-software,先读它理解两种状态)
- 编程思维(programming-mindset,约定就是接口)
- 互联网原理(web-internet,网页默认编码)