python2.7中的编码问题

Python 中的编码问题,主要是涉及到中文问题

在sublime编辑器中,编码问题涉及到源文件的编码和代码中的编码问题。

sublime编辑器,源文件默认是ascii编码,写入中文文字会报编码错误,因此很多源文件中第一行会指定特定源文件的编码类型,例如# -*- coding: utf-8 -*- 

python中字符串的编码与解码,主要涉及到两个字符串函数encode 和 decode

python中的str类型都是对应特定编码类型的,比如utf-8、gbk等,比如“中文”在不同的编码类型下str字符串对应的字节码是不同,因为相同的字符,不同的编码规则,对应的字节是不同的。

# -*- coding: utf-8 -*-
# 中文
import sys
s = "中文"
b = s.decode('utf-8')
print type(b)
c = b.encode('utf-8')
d = b.encode('gbk')
print list(bytearray(c))
print list(bytearray(d))
print sys.stdout.encoding
print s
输出:
<type 'unicode'>
[228, 184, 173, 230, 150, 135]
[214, 208, 206, 196]
utf-8
中文
python2.7中字符串str类型是对应特定编码类型的字节码的,为了实现了多种不同编码类型的字符串的转换,python2.7引入了unicode编码类型,作为不同编码类型的字符串的转换的中介。

所以就出现了,特定编码的str类型的对象按照它的编码类型进行decode成unicode类型的对象,然后unicode对象在按照特定编码类型在encode成str对象,实现了不同的编码类型str对象的转换。unicode可以作为中介的原因在于它支持所有字符的编码。

还有就是print字符串的时候出现的编码错误问题。原因在于sys.stdout.encoding。print 后面跟的字符串对象的编码类型一定要与sys.stdout.encoding所指定的一致,不一致就会出现编码错误,原因在于,打印字符的时候,按照默认的编码类型无法解析其他编码类型的字节。例如,在上面的代码中添加print d会出错。因为d的编码类型是gbk。所以这就是为啥涉及到字符串中有中文的时候,使用print打印出现看看的时候出现编码错误的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值