什么是文本编码?
因为做字幕经常需要和文字、文本、文稿以及各种文本文件打交道,所以经常会遇到乱码的情况。如果不理解文本编码的话,遇到乱码时就会手足无措,甚至耽误工作。所以,对于经常与文字打交道的朋友来说,了解下文本编码还是有些益处的。
此文主要写给不理解文本编码的同学看,试图用最简单易懂的方式讲解文本编码,以及乱码的产生和消除。
首先,假设我们有两本字典:字典A和字典B。
字典的作用是什么呢?是把汉字按照一定顺序记录下来,比如:
这时候你要把“大家都说汉字就是好”这句话记录下来,为了简便,只记下每个字的编号就可以了,但是每个字的编号如何确定呢?你要有一个字典来查,你决定按照字典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、TXT等文本类型文件的时候,软件会先弹出一个预览窗口,并自动帮你检测文本编码,而且基本都可以准确检测。如果看到内容预览里有乱码的话,可以在预览窗口中尝试切换其他编码,直到不再有乱码为止。