第三章:了解计算机编码

更新于:2019-11-03 19:50:27

紧随上节,计算机里所有的文件类型都是存在计算机里的一堆二进制数字,我们人类直接看是看不懂,需要借助“编码”这东西把它翻译过来。


有时我们从网上下载一部电影,如果播放器播放不了,它就会提示编码不正确。编码有很多种,视频文件有各种视频编码,音乐文件有各种音乐编码,文字也有不同的字符编码。视频、音乐的编码我们不去研究了,它不是把二进制翻译成我们人眼能看的字符,而是让播放器能读懂的东西。楠神主要带领大家了解字符编码,把二进制数字转成我们人类能看懂的符号。


了解下什么是ASCII码


下面这是一张ASCII码表,在我们的CSS手册附录里有这张表。


1.png


这张图表达的什么意思?看下面的讲解:


前面楠神说过了,一个字节有八位,大家知不知道八位二进制可以能表示多少个数字吗?

0000 0000、0000 0001、0000 0010…… 1111 1101、1111 1110、1111 1111 总共256个,0——255,2^8 = 256


如果让每一个八位二进制数字对应一个字符,那八位二进制可以表示出256个大小为一个字节的字符。看上面的ASCII码表,仅用了126个数字就把一些电脑里常用的字符表示出来了。


0~31数字表示的是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。


32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。


ANSI编码


ASCII码是最早的字符编码,ASCII编码对于那些使用拉丁字母做语言的国家完全够用了,可世界上还有很多国家不使用拉丁字母,就像我们使用汉字、俄罗斯使用斯拉夫字母、韩国使用韩文、泰国使用泰文……


每个国家都想显示本国的语言,都对ASCII编码进行了扩展,扩展后的编码叫ANSI编号。


ANSI编码用2个字节(16位二进制)来表示一个字符,共可以表示65536个字符。

中国的ANSI编码是:GB2312编码

台湾的ANSI编码是:BIG5

日本的ANSI编码是:JIS

……


简体汉字的“GB2312”、“GBK”都属于ANSI编码,ANSI编码里包括了一个字节的ASCII编码。


GB2312简体汉字编码

对6763个汉字进行了编码,有六百多个符号码。


GBK简体汉字扩展编码

K为扩展的意思,对GB2312进行了扩展,又加入很多汉字,包括:古汉语、冷门字等。

GBK已经对约2.3万个汉字进行了编码。


Unicode编码


如果你的电脑有编码为“GBK”的汉字文档,你把这个文档传给了一台不支持“GBK”的电脑,这个文档就不能正常显示了。ANSI码不太利于装有不同语言操作系统计算机之间的交流,于是世界组织将世界上所有的字符进行统一编码,用于各国之间的计算机交流,这就是 Unicode编码 。


为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode通常用两个字节表示一个字符,与ASCII码不兼容。原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。


目前,Unicode编码在网络、Windows系统和很多大型软件中得到应用。


UTF-8 (Unicode Tranform Format)统一转换格式,多国语言编码


UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。


根据字符的不同,而选择不同长度的编码。如:字母“a”,可以用1个字节来表示,汉字,用3个字节来表示。UTF-8最多用三个字节表示一个字符。


UTF-8是非常常用的一种编码,虽说是比GBK占的字节大点,但它的通用性很好。建议大家编写的代码文件设置为UTF-8。


编码的知识楠神就带领大家了解这些,感兴趣的可以去搜索更详细的教程。我们在使用编码的时候除了极个别字符,不需要去知道每个字符在编码里的数字是多少。在以后的编程里,像“换行”、“回车”有的时候会用到。


扩充知识:


弄清字符与字节的关系:一个字节可以表示字符,两个字节也能表示出字符,也就是一个字符可能占一个或两个或三个或四个字节。不同的字符在不同的编码里关联数字不一样,所以使用错误的编码阅读字符,就会出现乱码的情况,只有ASCII码里的字符是通用的。


了解了今天这节内容,应该有所明白IP地址里的数字为什么不会大于255了吧,比如内网常用的ip192.168.1.1 


IPv4中规定IP地址长度为32位,如果有大于255的数字,它就需要两或三个字节去表示这个数字,那就会超过所规定的IP地址长度。