编码
def setencode(): import sys reload(sys) sys.setdefaultencoding('utf8')
我用着可用的:
import sys type = sys.getfilesystemencoding() print myname.decode('utf-8').encode(type)
摘自网络
比如我从网上下载一些信息或写个电子邮件程序下载到本地,以记事本(txt) 形式写入并保存在本地计算机,为什么看到只是英文和乱码的?该怎样做呢? 答 乱码原因: 因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件。但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串当然是乱码了。 解决方法: 在控制台打印的地方用一个转码就ok了,打印的时候这么写: print myname.decode('utf-8').encode('gbk') 比较通用的方法应该是: import sys type = sys.getfilesystemencoding() print myname.decode('utf-8').encode(type)
下面我们看常用的中文乱码解决方法集
方法一:
在文件的开头加入编码声明: #coding = gbk s = '谷歌' print s 输出结果:谷歌
方法二:
在输出时进行转码: #coding = utf-8 s = '谷歌' print unicode(s,'gbk') 输出结果:谷歌 txt文件中文乱码处理 某些软件,如notepad,在保存一个以utf-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xef 0xbb 0xbf,即bom)。因此我们在读取时需要自己去掉这些字符,python中的codecs module定义了这个常量
- coding=gbk
import codecs data = open("test.txt").read() if data[:3] == codecs.bom_utf8: datadata = data[3:] print data.decode("utf-8")
用unicode函数和decode方法把str转换成unicode。为什么这两个函数的参数用"gbk"呢? 第一反应是我们的编码声明里用了gbk(# coding=gbk),但真是这样? 修改一下源文件:
- coding=utf-8
s = "中文" print unicode(s, "utf-8")
运行,报错: traceback (most recent call last): file "chinesetest.py", line 3, in <module>
s = unicode(s, "utf-8")
unicodedecodeerror: 'utf8' codec can't decode bytes in position 0-1: invalid data
显然,如果前面正常是因为两边都使用了gbk,那么这里我保持了两边utf-8一致,也应该正常,不至于报错。 更进一步的例子,如果我们这里转换仍然用gbk:
- coding=utf-8
s = "中文" print unicode(s, "gbk") 结果:中文