计算机编码问题

一、ASCLL码

ASCII码起源是为了解决计算机处理字符问题。它由美国创造,因此仅包括了美国语言中的字符和控制符,每个字符占一个字节,因此对于双字节语言的支持不好。

ASCII 码 表示 127 个英文字符
每个中文需要使用两个字节来编码,中文编码的规则 —— GB2312
由于不同国家有不同的编码规则,如日本,韩国都使用各自国家的编码规则,在多语言
混用的场合会出现混乱。

数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现。数字 127 代表 DELETE 命令。

ascll码表可参照https://baike.so.com/doc/6954041-7176472.html

二、GBk编码

具体研究可参照https://baike.so.com/doc/2389354-2526441.html

GB2312的出现,基本满足了汉字的计算机处理需要,但对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现。

GBK即汉字内码扩展规范,K为扩展的汉语拼音中"扩"字的声母。英文全称Chinese Internal Code Specification。GBK编码标准兼容GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--基本集》,1980年由国家标准总局发布。基本集共收入汉字6763个和非汉字图形字符682个,通行于中国大陆。新加坡等地也使用此编码。GBK是对GB2312-80的扩展,也就是CP936字码表 (Code Page 936)的扩展(之前CP936和GB 2312-80一模一样)。

GBK采用双字节表示,即一个汉字占两个字节,总体编码范围为8140-FEFE,首字节在81-FE 之间,尾字节在40-FE 之间,剔除 xx7F一条线。总计23940 个码位,共收入21886个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号883 个。P-Windows3.2和苹果OS以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码。

三、Unicode码

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。

Unicode用来把所有语言都统一到一套编码里面,这样就不会有乱码问题了,Unicode通常用两个字节编码(有的也用四个字节)而ASCLL码通常采用一个字节。ASCLL码转换成Unicode在前面一个字节补0.

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。

四、UTF-8码

UTF-8 编码把一个 Unicode 字符根据不同的数字大小编码成 1-6 个字节,常用的英文字母被编码成 1 个字节,汉字通常是 3 个字节,只有很生僻的字符才会被编码成 4-6 个字节。如果你要传输的文本包含大量英文字符,用 UTF-8 编码就能节省空间。UTF-8 的一个好处在于,原有的 ASCII 的编码可以在 UTF-8 下继续工作。

五、计算机采用的编码工作方式

由于Unicode的编码方式占用内存较大,所以在需要将信息保存到硬盘或者进行传输的时候,需要转换为utf-8编码形式,以便节省资源空间或提高传输效率。

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就需要先转换为utf-8编码的形式

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:

所以你看到很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。

字符串在python内部表示的是unicode编码,因此在做编码转换时,通常需要一Unicode作为中间码,即先将其他编码的字符串解码(decode)成 unicode,再从 unicode 编码(encode)成另一种编码。

解码:decode指的是:将其他编码形式转换为unicode编码

decode 的作用是将其他编码的字符串转换成 unicode 编码,如 str1.decode(‘utf-8’),表
示将 utf-8 编码的字符串转换成 unicode 编码。

编码:encode指的是:将unicode编码转换为其他形式的编码

encode 的作用是将 unicode 编码转换成其他编码的字符串,如 str2.encode(‘gb2312’),表
示将 unicode 编码的字符串转换成 gb2312 编码。

六、GBk和utf-8的区别

1、字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。

2、至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8节省空间。

3、GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。

4、GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准),UTF-8编码的文字可以在各国各种支持UTF8字符集浏览器上显示。比如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。 所以,对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。

5、UTF8是国际编码,它的通用性比较好,外国人也可以浏览论坛,GBK是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大。

猜你喜欢

转载自blog.csdn.net/weixin_44239541/article/details/89575749
今日推荐