根本解决Python2中unicode编码问题
Python2中编码问题
因为计算机只识别01这要的⼆进制,所以在计算机存储我们的⽂件时,要使⽤⼆进制数来表⽰。所以编码就是哪个⼆进制数表⽰哪个字符:
编码原由
系统编码、⽂件编码与python系统编码
Python字符编码
python中的字典、数组转字符串中的中⽂编码
编码原由
ASCII编码
最早出现的是ASCII码,使⽤8位⼆进制数组合表⽰128种字符。因为ASCII编码是美国⼈发明的,当初没考虑给别的国家⽤,所以,它仅仅表⽰了所有美式英语的语⾔字符。但是没有使⽤完。
ISO 8859-1/windows-1252
128位字符满⾜了美国⼈的需求,但是随之欧洲⼈加⼊互联⽹,为了满⾜欧洲⼈的需求,8位⼆进制后⾯还有128位。这⼀段编码我们称之扩展字符集,即ISO 8859-1编码标准,后来欧洲的需求变更,即规定了windows-1252代替了ISO 8859-1
GB2312
然后当我国加⼊后,8位⼆进制(即⼀个字节)⽤完了,于是我们保留ASCII编码即前128位,后⾯的全部删除。因为我国得语⾔博⼤精深,所以需要2个字节,即16位才能满⾜我们得需求,所以当计算机遇到⼤于127的字节时,就⼀次性读取两个字节,将他解码成汉字。即
GB2312编码
GBK
相当于GB2312的改进版,增添了中⽂字符。但还是2个字节表⽰汉字
GB18030
为了满⾜⽇韩和我国的少数民族的需求,对GBK的改进,使⽤变长编码,要么使⽤两个字节,要么使⽤四个字节。
Unicode
虽然每种编码都兼容ASCII编码,但是各个国家是不兼容的。于是出现了Unicode,它将所有的编码进⾏了统⼀。它不能算是⼀种具体的编码标准,只是将全世界的字符进⾏了编号,并没有指定他们具体在计算机种以什么样的形式存储。
它的具体实现有UTF-8,UTF-16,UTF-32等。
系统编码、⽂件编码与python系统编码
在linux中获取系统编码结果:
Windows系统的编码,代码页936表⽰GBK编码
可以看到linux系统默认使⽤UTF-8编码,windows默认使⽤GBK编码。Linux环境下,⽂件默认使⽤UTF-8编码。当然你也可以指定⽂件编码⽅式。
Python解释器内部默认使⽤的ASCII编码⽅式去解读python源⽂件。
所以当⽂件内存在⾮ASCII字符时,python解释器⽆ 法识别,就会出现编码错误。
So,这个时候需要告诉python解释器⽤utf-8去解读python源⽂件
Python字符编码
Python2中有两类字符串,分别是str与unicode。这两类字符串都派⽣⾃抽象类basestring。
Str即普通字符串类型
在字符串前加上u即unicode编码
在代码中通常⽤到的是unicode,⽂件保存的是utf-8编码。Unicode编码是固定2个字节代表⼀个字符。Utf-8是对英⽂只⽤⼀个字节,对中⽂是3个字节。所以unicode运⾏效率⾼,utf-8运⾏效率相⽐要低,但是空间存储要⼩。
Python中str与unicode转换
Unicode转str
str转unicode
其函数中参数UTF-8是,以utf-8编码对unicode对象解码,或编码。
python中的字典、数组转字符串中的中⽂编码
当字典中的中⽂字符是unicode类型时
decode(“unicode-escape”)相当是反向编码.然后再进⾏utf-8编码即可
当字典中的字符串是string类型时
当数组进⾏字符串化时
最后总结:不管是数组还是字典,在进⾏字符串转换是,即是⼜⼀次编码,所以,对于本⾝还有的中⽂字符串⼜⼀次编码,所以要进⾏⼀次反编码,才能看到原有的编码.name = {"name": "中国"}
unicode编码转换二进制name = str(name)
print name.decode("string-escape")
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论