那天,妹子给我发来了一串乱码…

本文转载自 编程技术宇宙,作者 菜饼

那天,妹子给我发来了一串乱码…_第1张图片

咳咳,人生的三大错觉之一

就是她喜欢我

那天,妹子给我发来了一串乱码…_第2张图片

为了解开粉丝的疑惑,让他面对现实。今天我就来给大家揭秘,乱码背后那些不为人知的事!

那天,妹子给我发来了一串乱码…_第3张图片

首先,我们要意识到『乱码』

本质上是编码与解码的方式不一致

那天,妹子给我发来了一串乱码…_第4张图片

举个例子,当用拼音的方式来解读英文

那天,妹子给我发来了一串乱码…_第5张图片

事实上,Excel 对中文的解析编码默认是 GBK

那天,妹子给我发来了一串乱码…_第6张图片

所以,当有人把 UTF-8 编码的 Excel 文件发给你

Excel 默认会用 GBK 去解析

双击打开,出现一大坨乱码,其实是很正常滴

才不是有什么隐含信息呢

那天,妹子给我发来了一串乱码…_第7张图片

那么遇到这种问题该怎么解决呢?

那天,妹子给我发来了一串乱码…_第8张图片

知道了乱码产生的原理是

读取的编码方式与写入时不一致

那么解决办法就很简单了——(把读取的编码方式改为 UTF-8)

那天,妹子给我发来了一串乱码…_第9张图片

那天,妹子给我发来了一串乱码…_第10张图片

因为 Numbers 默认是 UTF-8

所以不会显示乱码

那天,妹子给我发来了一串乱码…_第11张图片

什么?你说就这?

作为程序员

当然还有更装逼的办法

当然还有更加极客的办法

(把文件转为 GBK)

iconv -f UTF-8 -t GB18030 test.csv > test2.csv

那天,妹子给我发来了一串乱码…_第12张图片

轻松搞定!

那天,妹子给我发来了一串乱码…_第13张图片

既然讲到这了,那就再讲讲 UTF-8 到底是个什么东东

那天,妹子给我发来了一串乱码…_第14张图片

首先,我们都知道,计算机起源于美国

他们用二进制来存储数据

那天,妹子给我发来了一串乱码…_第15张图片

每一个 0 或 1 称为一位

那天,妹子给我发来了一串乱码…_第16张图片

而八位就组成了一个字节

那天,妹子给我发来了一串乱码…_第17张图片

每一位能标识两种状态

每个字节则能标识 2^8 = 256 种状态

那么这些状态有啥用呢?

那天,妹子给我发来了一串乱码…_第18张图片

美国人把 0 - 127 这 128 个状态

都映射到各种字符上

包括大小写英文字母、标点符号、数字

这就是常说的 ASCII 字符集

那天,妹子给我发来了一串乱码…_第19张图片

后来,随着其他国家开始使用计算机

ASCII 里没有他们的字母,他们便利用起剩下的 128 - 255 位,这被称为 ASCII 拓展字符集

然而,事情并没有这么简单

等到中国人开始使用计算机时,已经没有多余的位置了

咋办呢?

那天,妹子给我发来了一串乱码…_第20张图片

智慧的中国人民,毫不客气地去掉了127 位之后的编码

用 2 个字节来编码一个汉字

这样一来,7000 多常用汉字的编码问题就解决了

这就是 GB2312 编码

它是对 ASCII 的中文拓展

那天,妹子给我发来了一串乱码…_第21张图片

但汉字实在太多了!GB2312 不够用了咋办呢

这个问题充钱(拓展)就能解决

那天,妹子给我发来了一串乱码…_第22张图片

这回拓展出了GBK,不仅包含 GB2312 所有内容,还包含了 20000 多个新的汉字(含繁体字)

那天,妹子给我发来了一串乱码…_第23张图片

再后来少数民族也要用电脑了,GBK 又拓展成了 GB18030

这一系列汉字编码标准被通称为DBCS

那天,妹子给我发来了一串乱码…_第24张图片

中国人的编码问题解决了

但日本、韩国各自的编码问题咋办呢?

他们也各自搞了一套自己的编码标准

结果就是

谁也不支持谁

那天,妹子给我发来了一串乱码…_第25张图片

兼容性问题眼看着愈来愈严重,这可咋办呢?

这时!Unicode 闪亮登场

那天,妹子给我发来了一串乱码…_第26张图片

Unicode 的制定就是为了将世界上所有的符号都纳入其中

每一个符号都给予一个独一无二的编码

如此一来就可以解决乱码问题

(虽然到现在并没有解决)

这就是字符集的发展过程

那天,妹子给我发来了一串乱码…_第27张图片

回到 UTF-8

它其实是 Unicode 字符集的一种编码方式

那天,妹子给我发来了一串乱码…_第28张图片

UTF-8 由肯·汤普逊罗勃 · 派克发明

那天,妹子给我发来了一串乱码…_第29张图片

其中,肯·汤普逊 是名副其实的大佬

那天,妹子给我发来了一串乱码…_第30张图片

那天,妹子给我发来了一串乱码…_第31张图片

听听,这是人话吗?!

那天,妹子给我发来了一串乱码…_第32张图片

知道了 UTF-8 的来历,那么 UTF-8 具体是怎么编码的呢?

那天,妹子给我发来了一串乱码…_第33张图片

UTF-8 作为一种可变长的编码方式

也就是说,不同的字符占用的字节数不同

2003年11月,UTF-8 被 RFC 3629 重新规范后,使用 1- 4个字节来进行编码。规则其实很简单:

那天,妹子给我发来了一串乱码…_第34张图片

来看几个例子

那天,妹子给我发来了一串乱码…_第35张图片

那天,妹子给我发来了一串乱码…_第36张图片

按照不同的编码方式

同一句话被编码后的 01 字符串不同

(正如我们前面所说的 UTF-8 和 GBK)

那天,妹子给我发来了一串乱码…_第37张图片

是不是很简单?

你可能感兴趣的:(那天,妹子给我发来了一串乱码…)