# HTML5教程 - 4 字符编码

# 4.1 编码和解码

所有的数据在计算机中存储时都是以二进制 0 和 1 的形式存储的,文字图片都不例外。

那我们为什么能看到文字呢?

这是因为在存储文字的时候,都需要转换为二进制码(0 和 1)进行存储。当我们读取这段文字时,计算机会将二进制编码转换为字符,供我们阅读。

所以这里涉及到两个步骤:编码解码

  • 编码 :将字符转换为二进制码的过程称为编码。

  • 解码 :将二进制码转换为字符的过程称为解码。


# 4.2 字符集

但是将二进制和文字之间编码和解码遵循什么规则呢?这里就会用到字符集。

计算机是美国人发明的,美国人的文字也就是大小写字母+数字+一些符号就完事了,满打满算100多个,够用了。他们就整了一个 ASCII 码,如下:

ASCII码叫美国信息交换标准代码,规定了对应二进制数字对应的文字(上面 ASCII 值使用的十进制表示),总共 128 个。从上图可以看到 a 对应的数字是 97 ,也就是二进制的 97 表示字母 a

但是美国人使用计算机,欧洲人也要使用计算机啊,但是欧洲的语言128个字符满足不了啊,因为包括罗马字母和符号等,于是欧洲搞了一个 ISO-8859-1(当然还有一些其他的字符编码)。

中国也要用计算机啊,这些编码都不行,我们搞了一个 GB2312 的字符编码,包括 6763 个常用汉字和 682 个字符,但是不包括生僻字和中文繁体,后来由搞了一个 GBK,支持 20000+ 汉字,支持繁体中文。

但是世界上的语言太多了,字符集也太多了,有没有一个字符集支持世界上所有的语言呢?有的!

它就是 UTF-8 (大小写均可),utf-8 字符集是万国码,包含所有语言文字和符号,我们以后使用 UTF-8 字符编码就好了。

# 4.3 乱码问题

如果我们保存文档用的字符编码和读取文档用的编码不是一个编码,就会出现乱码问题。

举个栗子:

使用 VSCode 新建一个文本文件:

编写一段文字,然后选择使用指定的字符编码进行保存:

可以选择 GBK 编码进行保存(VSCode 默认是 UTF-8 编码):

关闭 VSCode,重新使用 VSCode 打开保存的文件(不关闭会有缓存),会发现之前的文档乱码了,因为打开的时候,默认是使用 UTF-8 字符编码打开。

怎么办呢?此时还有救,因为我们编写的是中文,保存的时候使用的是 GBK 保存的,只需要重新使用 GBK 编码打开就可以了:

修改使用 GBK 打开后,文档又正常显示了。


但是但是!!!需要注意,我们刚才编写的是中文,保存使用的是 GBK 进行保存,GBK 是支持中文的,所以保存是成功的,使用对应的字符编码读取就可以了。但是如果我们编写了中文,然后使用 ISO8859-1 字符编码进行保存,那完蛋了,因为 ISO8859-1 字符编码是不支持中文的,所以在保存的时候每个字符是找不到对应的二进制编码的,保存的就是一个 ?,所以文档没有成功保存!!!保存以后,使用任何的编码都无法读取文档的内容了!

也就是说,保存文档的时候,一定要选择支持文档内容的编码进行保存,只要保存成功了,选择对应的编码读取就可以了。即使使用了不对的编码打开,也只是乱码而已,文档的内容不会丢。但是如果保存的字符编码不支持保存的内容,那完犊子了,你内容就没有成功,切记切记!!!

下面是使用 ISO8859-1 保存中文后的效果:

当然,我们以后使用 UTF-8 编码就可以了,保存和读取都使用 UTF-8,没毛病!

在编写 HTML 文件的时候,使用 UTF-8 字符编码进行保存,然后通过 meta 标签来设置网页的字符集,让浏览器使用 utf-8 字符集来进行解析,避免乱码问题。

<meta charset="utf-8" />
1