Python字符编码问题

写Python经常受到字符编码的困扰, 此问题主要是在2.x中. 因为2.x中的字符串有两种类型: str和Unicode, 它们共同的祖先是basestring.下面的经验主要是基于Windows上面的Python2.x, 使用MacOS可以减少许多不必要的烦恼.


之所以经常出现字符乱码,有以下几点原因:

  1. Python默认使用ASCII码解释,有时候文件流(或者其他流)不是ASCII码的时候会出现乱码
  2. Windows_中文版使用的是gbk编码,(尤其是Windows的命令行工具)
  3. 读取的流,有时候是gbk编码(或者其他编码格式)
  4. str类型与Unicode类型转换或者拼接的时候,由于不一致会发生错误.
解决方法主要有下面几种:
  1. 文件第一行写上注释:  # coding=utf-8, 告知Python解释器源代码的编码格式
  2. 所有与字符串相关的变量都设置成为Unicode类型, 比如 name = u"xiaoming"
  3. 利用Unicode编码作为桥梁转换, 先解码成为Unicode,之后编码成为你的目标编码格式. 比如一个文件时utf-8编码,但是Windows命令行是gbk编码,可以这样: filehandle.read().decode("utf-8").encode("gbk"), decode是解码成为Unicode编码(按照utf-8的规则解码, 这个过程是utf-8-->Unicode), encode是再次将字符串编码成为gbk格式(这个过程是: Unicode-->gbk),这样Windows命令行就可以正常读取出来了
  4. 使用codecs模块.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值