python中文编码老是出错问题…

 

 python的UnicodeDecodeError: 'utf8' codec can't decode byte 0xxx in position

这个错误是因为你代码中的某个字符串使用了费ascii编码的字符,也就是它代表的16进制的编码超过127。

解决这个问题可以使用下面的方法解决,其实就是设置默认的编码。python 2.x的默认编码是ascii,如果改为utf-8,就可以了。


import sys
reload( sys )

sys.setdefaultencoding('utf-8')


其实从python 3.0以后默认就用utf-8,就没有这个问题了。



新手写pyhton程序经常遇到编码问题,其实是对py的编码不熟悉,经常范小毛病,郁闷好久。。。

今天终于搞懂的py的编码。

1. pyhton的所有内置库、方法接受的是unicode编码的字符串。

2. str.decode 函数就是转成unicode编码,所以能decode的字符串传级python的内置库、函数都能正确运行。

3.问题在于这个decode函数解码时到底要传哪个参数:utf-8,gbk,gb2312......等N种编码。参数不当,就会抛类似异常:

UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence

   UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data

下面举个例子:

#coding:utf-8    

  1. #指定本文件编码为utf8  
  2. import os  
  3. # 以下为示例代码,不一定能运行。随意写的,无编译运行过。  
  4. # 例子以XP平台为例,因为linux平台编码(UTF-8)与window平台(GBK)不一样。  
  5. # 假设D盘下面有很多中文名称文件  
  6. filelist = os.listdir(r"d:\") # 此处返回的list中的中文是以GBK编码的,你可以通过查看cmd窗口属性看到。  
  7. for path in filelist:  
  8.     if os.path.isdir(path): continue  
  9.      fp = open(path.decode("GBK") , 'rb')  # 如果此处用 path.decode("UTF-8") 就会抛异常,原因是wind的dir命令返回的是GBK编码  
  10.     print len(fp.read())  
  11.      fp.close()  
  12. filepath =r"d:\中文文件.doc"             # 假设此文存在,记得要带中文  
  13. fp = open(filepath.decode('utf-8'), "rb") #这里使用utf8参数进行解码,原因是文件头里有句coding: utf-8  
  14. print len(fp.read())  
  15. fp.close()  
  16. path2 = u"d:\中文文件.doc"  # 假如这里有个u在前面,这个变量就是unicode编码了,不用解码。  
  17. fp = open(path2, 'rb')  
  18. print len(fp.read())  
  19. fp.close()  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值