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

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

图片

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

就是她喜欢我

图片

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

图片

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

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

图片

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

图片

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

图片

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

Excel 默认会用 GBK 去解析

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

才不是有什么隐含信息呢

图片

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

图片

知道了乱码产生的原理是

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

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

图片

图片

因为 Numbers 默认是 UTF-8

所以不会显示乱码

图片

什么?你说就这?

作为程序员

当然还有更装逼的办法

当然还有更加极客的办法

(把文件转为 GBK)

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

图片

轻松搞定!

图片

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

图片

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

他们用二进制来存储数据

图片

每一个 0 或 1 称为一位

图片

而八位就组成了一个字节

图片

每一位能标识两种状态

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

那么这些状态有啥用呢?

图片

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

都映射到各种字符上

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

这就是常说的 ASCII 字符集

图片

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

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

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

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

咋办呢?

图片

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

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

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

这就是 GB2312 编码

它是对 ASCII 的中文拓展

图片

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

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

图片

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

图片

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

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

图片

中国人的编码问题解决了

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

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

结果就是

谁也不支持谁

图片

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

这时!Unicode 闪亮登场

图片

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

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

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

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

这就是字符集的发展过程

图片

回到 UTF-8

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

图片

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

图片

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

图片

图片

听听,这是人话吗?!

图片

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

图片

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

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

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

图片

来看几个例子

图片

图片

按照不同的编码方式

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

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

图片

是不是很简单?

  • 106
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值