字符编码-深入理解ASCII,GB2312,GBK,Unicode,UTF-8

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符编码-深入理解ASCII,GB2312,GBK,Unicode,UTF-8相关的知识,希望对你有一定的参考价值。

参考技术A

ASCII码是西欧编码的方式,采取7位编码,所以是2^7=128,共可以表示128个字符,包括34个字符,(如换行LF,回车CR等),其余94位为英文字母和标点符号及运算符号等。

重点:

注:NUL:‘\\0\'是一个ASCII码为0的字符,从ASCII码表中可以看到ASCII码为0的字符是“空操作字符”,它不引起任何控制动作,也不是一个可显示的字符。

你看到的unicode字符集是这样的编码表:

计算机只懂二进制,因此,严格按照unicode的方式(UCS-2),应该这样存储:

这个字符串总共占用了18个字节,但是对比中英文的二进制码,可以发现,英文前9位都是0!浪费啊,浪费硬盘,浪费流量。

怎么办?

UTF

UTF-8是这样做的:

这样就形成了如下的UTF-8标记位:


从上面的内容了解了字符编码以后,以后遇到相关的字符编码问题的时候至少有解决的思路,而不是一头雾水

开始问题分析:
1.字符集分析:gb2312支持数字和英文和6000+汉字
2.编码分析:英文占一个字节,中文占两个字节(这就是问题)

这时就要想到,中文汉子对照表:

3.特性:gb2312的高位字节如果大于127(ASCII),就为中文,只有gb2312具有这个特性

4.如果想兼容utf-8和unicode和gbk,那么可以4位16进制的字符截取,如果大于127,那么默认为中文,否则就是英文或字符或数字

这个函数是把数字或进制字符都转为10进制的数字,第二个参数radix表示的是第一个参数string的类型(10进制,2进制,8进制,16进制),我之前很白菜的理解为我想把第一个参数string转化成16进制。哎,我还是太年轻啊

字符编码

py 2.0 上默认ASCII 不支持中文所以出现了GB2312

uncode 是万国编码 包含各个国家的字符 utf-8 是uncode 的一个扩展集

GBK兼容GB2312 

uncode 中文英文均为2字节 ASCII为一个字节 utf-8 英文1个字节中文3个字节

如果一个文件用GBK编码

另一个程序用utf-8编写

由于GBK与utf-8不能互译

需要将GBK 解码为uncode (decode)再编码(encode)utf-8

py3.0默认为uncode

声明编码

#-*- codin:utf-8 -*- 

以上是关于字符编码-深入理解ASCII,GB2312,GBK,Unicode,UTF-8的主要内容,如果未能解决你的问题,请参考以下文章

关于gbk, gb2312,unicode,utf-8等字符编码的问题

彻底搞清楚字符编码: ASCII, ISO_8859, GB2312,UCS, Unicode, Utf-8

字符编码

汉字编码 (GB2312 GBK GB18030)

补充:字符编码ASCII ISO8859-1GB2312GBKUnicodeUTF-8

几种常见的编码方式