Python 中文编码
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5.
GB2312(1980年)一共收录了7445个字符,包括6763个汉子和682个其他符号。汉字区的内码范围高字节从B0-E7,低字节A1-FE,占用的码位是72*94=6768.其中5个空位是D7FA-D7EF。
GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字去和图形符号区。汉字区包括21003个字符,2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、*文扥更主要的少数名族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不做要求。所以手机、MP3一般支持GB2312.
从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。这些编码中,英文和中文可以统一地处理,区分中文编码的方法是高字节的最高位不为0.按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集(DBCS)
有的中文windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB118030,不过GB18030相对GBK增加的字符,普通人很难用到,通常我们还是用GBK只带中文windows内码。
关于ASCII码/unicode/utf-8
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代码所有字符和符号的编码即:Unicode
unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码、unicode是为了解决传统的字符编码方法的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由16位表示(2个字节)即2**16 = 65536
UTF-8 是对unicode编码的压缩和优化,他不在使用最少使用2个字节,而是将所有的字符和符号进行分类ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存。
所以,python解释器在加载.py文件中的代码时,会对内容进行编码(默认ascill)
时间节点:
ASCII 255 1bytes
————1980 GB2312 7XXX
------------1995 GBK1.0 2w+
-------------2000 GB18030 27xxxx
-------------UNICODE 2bytes
-------------utf-8 en:1byte, zh :3btes