编码

在用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就会报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值