[原创]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
下面举个例子:
今天终于搞懂的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()
相关文章推荐
- python中文编码老是出错问题…
- python3下中文编码问题
- Python中文编码问题详解
- Python中文编码问题
- python处理url中的中文编码,以及其他编码问题
- Python的中文编码问题
- python中文编码问题小结
- python 中文编码问题
- python 中文编码问题
- (原创)Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
- python的中文编码问题
- (原创)Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
- python open文件编码出错问题
- Python字符串编码+MySQLdb中的中文字符问题
- Python中文编码问题
- Python3 中的中文编码问题
- 浅谈Python2获取中文文件名的编码问题
- python实战之编码问题:中文!永远的痛
- python CGI模块获取中文编码问题解决- 部分方案
- python使用requests爬取网页,遇到中文出现乱码的编码问题及解决