vinthony / vinthony.github.io

all about myself.
8 stars 1 forks source link

Python 2.x 字符编码 #10

Open vinthony opened 9 years ago

vinthony commented 9 years ago

在上古计算机时代,在计算机发源地大美利坚,人们用ASCII描绘出了整个世界。 我们知道在ASCII中用 8位二进制 来表示字符串,在最初的单片机或者说如今的计算器上,0-9就是通过不同的7位二进制编码(首位始终为0)组合来做这件事。

简单地128个数字就描绘出了整个世界的喜怒哀乐

但是,随着Internet和全球化,人们发现简单地字符越来越不能表达出人们的思想。各民族之间有着不同的语言和交流方式。所以为了能在互联网上将自己的文化发扬光大,一些兼容于ASCII的字符扩充集就出现了。

在此我们主要讨论

Unicode 和 UTF-8

unicode 称为万国码,所谓万国码就是一种容纳“所有”字符扩展集的一种业界标准。一个二进制对应一个字符,一般用\uXXXX表示。每个X表示一个16进制数。 而UTF-8是unicode的一个编码标准,并没有定义具体的存储细节,每个字符用2字节存储。 在UTF-8中:

GB2312

gb2312是由中国国家标准总局发布的一个编码方案,涵盖了大部分的汉字,但由于一些偏僻的汉字没有包含,后被GBK取代。 两个字节来进行编码 0xXXXX

GBK

汉字内码扩展规范.厂商微软利用GB 2312-80未使用的编码空间 两个字节来存储。

python中的编码方式

在python中所有的数据都是用字节流来表示的。

strunicode都是basestring子类

str是unicode经过特定编码后的字节串 ,利用coding:utf-8来进行声明 unicode才是真正意义上的字符串

# -*- coding:utf-8 -*-  
u = u'文' # 定义为unicode编码
s = u.encode('UTF-8') #编码为utf-8,变成str
s2 = s.decode('UTF-8') #用UTF-8的方式将s进行解码,变成unicode