python2.× 编码问题

1、内置decode,encode

python的默认的编码是ascii: 指的是你写代码默认是编码是ascii 编码的, 当然你也可以改成你想要的编码,
比如在开头写个注释就用utf8编码 # -*-coding:UTF-8-*-

字符串在Python内部的表示是unicode编码

>>> a = u'我'                            # unicode编码
>>> type(a)
<type 'unicode'>
>>> print repr(a)

u'\xce\xd2'


>>> b = a.encode('utf-8')              # 将unicode编码成utf-8, 对unicode进行解码是错误的

>>> print type(b)
<type 'str'>
>>> print repr(b)

'\xc3\x8e\xc3\x92'


>>> c = b.decode('utf-8')            # 将utf-8解码为unicode,对str进行编码也是错误的

>>> print type(c)
<type 'unicode'>
>>> print repr(c)
u'\xce\xd2'


2、模块codecs

模块codecs提供了一个open()方法,可以指定一个编码打开文件,使用这个方法打开的文件读取返回的将是unicode。

写入时,如果参数是unicode,则使用open()时指定的编码进行编码后写入;

如果参数是str,则先解码成unicode,再根据源代码文件声明的字符进行编码。

相对内置的open()来说,这个方法比较不容易在编码上出现问题。

>>> import codecs
>>> f = codecs.open(r'e:\10.txt', encoding='gb2312')
>>> content = f.read()
>>> f.close()
>>> print type(content)               # codecs.open()自动将文件转换为unicode编码
<type 'unicode'>


#  写入unicode

>>> f = codecs.open(r'e:\10.txt', 'a', encoding='gb2312')
>>> f.write(content)


# 写入str

>>> strs = "我和他"
>>> print repr(strs)
'\xce\xd2\xba\xcd\xcb\xfb'
>>> strs1 = strs.decode("gb2312")   # 先解码为unicode
>>> f.write(strs1)
>>> f.close()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值