在用Python编码的时候,只要出现中文,必会出现编码的问题。这一定要下定决心搞清楚这个东西。
先来解释名词
ADCII码:利用二进制进行编码,最多可以给256个字符(包括字母、数字、标点符号、控制字符及其他符号)分配数值。
ANSI编码:又称为MBCS(muilti-bytes charecter set,多字节字符集),意思是用两个字节来代表一个字符的各种汉子延伸编码方式。在简体中文系统下,ansi编码代表GB2312编码.
ANSI编码在不同的语言下有不同的含义,所以中国的ansi编码放到日本,就会乱码。所以有一个Unicode这种中间介质。要想放在其他地方用,需要先转换成Unicode,然后用Unicode转换到其他的编码。
GB2312编码:ANSI编码的一种,是对ASCII编码进行扩充,符合汉字国情的汉字字符集国家标准编码,统称为GB码,国标码。最有影响的就是GB2312-1980.在储存的时候将每个字节的第8bit设置为1,因为西文字符设置为0.
GBK:GB编码的扩充,为了写一些比较复杂的字。
Unicode:可以看做一个大一统的编码集合,但是效率不高,比如它用四个字节储存一个符号,汉子可以,那么英文就多余了,对于储存和传输来说是耗资源的。
UTF-8:当时为了解决unicode在网络上传输的问题,以及提高Unicode编码效率,用这个编码,它可以根据不同的符号自动选择编码的长短。
现在就python中遇到的一些编码的问题进行探究,我觉得,我要是能把这几个问题搞清楚,基本也就搞清楚编码是怎么回事。
问题1:看代码
text = open('1.txt','r').read()
print(text[:100])
其中1.txt中的内容是“我是天才”,很简单几个字,我想打出来,但是没有打出来,很烦。
你说这玩意怎么办。明显不是正确的编码。一打中文就嗝屁。网上查的可能需要加句话“# -- encoding: utf-8 --” 但是好像加了之后没什么卵用。
我喜欢把思路体现在代码里,直接贴代码。
# -*- encoding: utf-8 -*-
# encoding:utf-8
text = open(u'1.txt','r').read() #得到str类型,输出unicode编码
print(text[:100])
textt = open(u'1.txt','br').read()
print(textt[:100]) #得到utf-8编码的东西。
detext = textt.decode('utf-8') #从utf-8解码成unicode
print(detext[:100]) #输出正确的字符
entext = text.encode('gbk')#会报错,说是bytes对象没有这个属性。
print(entext)#
# \u93b4是unicode编码
#decode()解码,将其他编码转化为Unicode编码字符。
#encode()编码,将Unicode编码转化为其他编码字符。
# '\xe6\x88\x91\xe6\x98\xaf\xe5\xa4\xa9\xe6\x89\x8d\r\n' 这是utf-8字节
# 鎴戞槸澶╂墠 unicode编码。
#如果用gbk去解码utf-8就会报错。