课时8:文本和字符集
摘要:本课主要介绍计算机中数据存储的进制形式,着重讲解文本的分类,包括纯文本和富文本的区别,同时深入探讨字符集的概念、常见字符集及其特点,以及乱码问题产生的原因和解决思路。
1.计算机底层数据存储进制
2.文本的分类和特点
3.字符集相关知识
01、 计算机中的数据存储进制
之前我们聊过二进制、十进制、八进制和十六进制。要明确的是,在计算机底层,所有内容都是以二进制形式保存的。我这儿有个小软件,不用你安装,简单看看就行。这软件叫 BinaryViewer(二进制查看器),能直接查看文件的二进制代码。比如我打开当前的README笔记文件,打开后,你会发现展示的都是二进制内容。这就直观地说明了我们编写的文件在计算机底层是以二进制形式存储的,大家看一眼有个印象就行。
02、 文本的分类及特点
接下来讲讲文本的概念。我们日常写的东西都可以叫做文本。文本主要分为两种类型:纯文本和富文本。
2.1纯文本
纯文本只能保存单一的文本内容,无法保存与文本内容无关的信息,像字体、颜色、图片这些都不行。我们常见的Markdown文件就是纯文本,还有在桌面上新建一个名为“hello.txt”的文本文档,在里面写上“ababc”并保存,这也是纯文本。判断一个文件是不是纯文本,就看它能不能保存除文本以外的内容,比如图片、颜色设置、字体大小设置等,如果都不能,那它就是纯文本。
2.2富文本
富文本则可以保存文本以外的内容,像字体样式、颜色、图片等。最典型的富文本就是Word文档。富文本能存储的内容更丰富,从图片、动画到视频,只要有需求都能存进去。
在开发程序的时候,我们使用的是纯文本。一般不会用Word写程序,除非有特殊情况,正常情况下编写代码都是用纯文本。
03、 纯文本的字符编码
纯文本内容在计算机底层同样要转换成二进制进行保存,这里就涉及到字符编码。把字符转换为二进制编码的过程叫编码,反过来,将二进制码转换为字符的过程就是解码。这就好比谍战片中,中共地下工作者发电报,发电报时把文字转换成对应的编码发送出去,接收方收到后再把编码转换回文字,这就是解码。
在编码和解码过程中,要遵循一定的规则,这个规则在计算机里被称为字符集。下面列举一些常见的字符集:
(1)ASCII
ASCII是美国人发明的编码,用七位来对美国常用字符进行编码。七位二进制数,不同组合方式共有128种,所以ASCII里有128个编码。美国的英文字母大小写加起来是52个,再加上各种符号,128个编码刚好够用。它是最早的编码,位数最少,只有七位。
(2)ISO8859-01
这是欧洲的编码标准,使用八位二进制数进行编码。因为欧洲语言相对更复杂,字符和符号更多,所以比ASCII多了一位。多一位就意味着编码数量增加一倍,一共有256个字符,它包含了ASCII的128个字符。
(3)GB2312和GBK
这些是中国的国标码,“GB”是“国标”的拼音缩写。它们把中文文字编进去,用来表示中文。但GB2312和GBK也有缺点,只包含常用中文,一些生僻字在里面没有。以前办理身份证时,如果名字里有生僻字,就打不出来,只能手写,这就是这些编码的局限性。
(4)Unicode
Unicode也叫万国码,它包含了世界上所有的语言和符号,是最全的编码。打开Unicode编码表,你能看到里面有各种各样的符号,包括中文和其他各国的文字符号。如果希望代码在世界上通用,有良好的兼容性,编写程序时一般会使用Unicode编码。
Unicode有多种实现方式,比如UTF-8、UTF-16和UTF-32。UTF-32固定使用四个字节来表示一个字符;UTF-16使用2-4个字节来表示,是变长的;UTF-8同样是变长的,使用1-5个字节来表示字符。在实际应用中,我们最常用的是UTF-8编码,以后开发时,一般使用的编码字符集就是UTF-8。
04、 乱码问题及解决
在编写程序时,如果代码出现乱码情况,就要马上去检查字符集是否正确,很可能是字符集设置错误。比如编码用的是GB2312,解码却用UTF-8,这样就会乱码。遇到乱码问题,就要检查字符集是否正确,不同的文本编辑方式修改字符集的方法不同,后续遇到相关问题我们再详细演示。以上就是关于进制、文本类型、字符集以及乱码问题的相关内容,之后我们会进一步探讨如何使用纯文本进行编程。