您的位置:首页 > 编程语言 > Python开发

[原创]python中文编码老是出错问题。

2009-08-10 10:01 323 查看
新手写pyhton程序经常遇到编码问题,其实是对py的编码不熟悉,经常范小毛病,郁闷好久。。。

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

 

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

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

   (这里补充一点,好像file.write(str), 这个函数接收的是encode后 的字符串。)

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
#指定本文件编码为utf8
import os
# 以下为示例代码,不一定能运行。随意写的,无编译运行过。
# 例子以XP平台为例,因为linux平台编码(UTF-8)与window平台(GBK)不一样。
# 假设D盘下面有很多中文名称文件
filelist = os.listdir(r"d://") # 此处返回的list中的中文是以GBK编码的,你可以通过查看cmd窗口属性看到。
for path in filelist:
if os.path.isdir(path): continue
fp = open(path.decode("GBK") , 'rb')  # 如果此处用 path.decode("UTF-8") 就会抛异常,原因是wind的dir命令返回的是GBK编码
print len(fp.read())
fp.close()
filepath =r"d://中文文件.doc"             # 假设此文存在,记得要带中文
fp = open(filepath.decode('utf-8'), "rb") #这里使用utf8参数进行解码,原因是文件头里有句coding: utf-8
print len(fp.read())
fp.close()
path2 = u"d://中文文件.doc"  # 假如这里有个u在前面,这个变量就是unicode编码了,不用解码。
fp = open(path2, 'rb')
print len(fp.read())
fp.close()
 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息