什么是文本编码?

此文写给不理解文本编码的同学看,试图用最简单易懂的方式讲解文本编码,以及乱码的产生和消除,了解的就不用看了。

首先,假设我们有两本字典:字典A和字典B。

字典的作用是什么呢?是把汉字按照一定顺序记录下来,比如:

字典A:

1 2 3 4 5 6 7 8 9  …
 就  好  字  家  说  汉  都  是  大  …

字典B:

1 2 3 4 5 6 7 8 9  …
 世  …

这时候你要把“大家都说汉字就是好”这句话记录下来,为了简便,只记下每个字的编号就可以了,但是每个字的编号如何确定呢?你要有一个字典来查,你决定按照字典A来记录。那么你记录下来的内容就是“9-4-7-5-6-3-1-8-2”。这个过程就称为“编码(动词)”。

然后你把这段内容告诉了伙伴甲,他看到一串数字,不懂,就拿来一本字典来查找。但是你没有告诉过他你用的是字典A,所以伙伴甲就随手拿了一本字典B来查,那么按照编号的顺序,他查出来的内容就是“岁民结大团人世万界”。这个过程就称为“解码(动词)”。

所以我们不难发现,编码解码的这个“码”,指的就是“9-4-7-5-6-3-1-8-2”这一串数字。而“编”和“解”这两个动作的过程都需要字典。

如果“编”和“解”使用的字典相同,那么就能够获得正确的原始内容。而在这个例子中,你是使用字典A编码,而伙伴甲使用了字典B解码,他看到的“岁民结大团人世万界”就称为“乱码”。如果这个时候你告诉了伙伴甲使用字典A的话,他就可以解码出“大家都说汉字就是好”这句正确的内容。


 

然后用这个原理来看电脑的文字存储,刚说的“字典”,在计算机领域叫做“字符集”。就像可以有好多种字典一样,字符集也有很多种。同一个字,在不同字符集里面对应的编号也不一定相同。常见的字符集的名字有“GB2312”、“GBK”、“GB18030”、“UTF-8”等。

要把一句话记录到电脑里,记录的不是文字的形状,而是每个字的编号,所以你要告诉电脑按照一个字符集,将文字转换成一连串的编号,就叫做“编码(动词)”。

然后将这个“码”,再按照一个字符集转换回文字,就称为“解码(动词)”。

这个“码”,其实就是一串数字信息了,称为“内码”,这个了解下即可。

同样,如果有一段文本,你保存时使用“GBK”字符集进行编码,打开时却用“UTF-8”字符集进行解码的话,你看到的一定是乱码。这段文字,你必须也使用“GBK”进行解码才能够看到正确的结果。


习惯用语。
上面讲的这些用语是比较规范的,但是在实际生活中,人们经常使用一些不太规范的说法来交流,我们来一起看一下。
你可以注意到,我在上面为“编码(动词)”和“解码(动词)”都标注了动词,也就是说他们是指动作。但是“编码”这个词汇在实际生活中,使用的却很灵活:
1、在软件保存文件时,提示“选择文本编码”,这时候你会觉得“编码”二字好像变成了名词,其实这句话写全了应该是这样的:“选择文本进行编码时使用的字符集”。所以你选择的其实是字符集。
2、用软件打开一个文本文件时,也提示你“选择文本编码”,这其实也是让你选择字符集,他的完整表述应该是这样的:“选择进行解码时使用的字符集”。
在以上两种情况下,“编码”二字的意思就和“字符集”比较像了,希望大家不要被搞晕。

实际应用

在使用Arctime读取SRT文件的时候,有时候你就发现你看到的是乱码,这是因为Arctime默认使用“GB18030”进行解码,如果你的SRT在保存时使用的是其他字符集,那就很可能出现乱码了。

这时候,你可以在Arctime的“文件>指定读取文件的编码”菜单中切换下字符集,再重新加载试试,应该就可以看到正确的内容了。

-ACELY

发表评论

电子邮件地址不会被公开。 必填项已用*标注