我就想不通为什么windows的字符终端用的是cp936而不是utf-8。不过要是他用的是utf-8,那我也没什么博文好写了==于是本菜鸟总结了一下,和广大python菜鸟分享。

当然如果你全部只用英文或数字,那我又没什么博文好写了wwww

当你的脚本在字符终端出现乱码或错误时,按以下办法自检:

  1. 打印的字符是中文字,但是都是没学过o(╯□╰)o:使用了utf-8编码(encode),字符终端代码页是gbk
  2. 打印出的都是“�åȡ��”:你使用了gbk或其他的编码,而终端使用的是utf-8

一般来说:

  1. 网页使用utf-8编码较多(听说以前百度是用的gb2312?),做爬虫并要打印在屏幕上时,要对原始数据做utf-8解码(decode)处理
  2. windows下的大部分文本文件是ANSI编码,读取文件并打屏幕上时做cp936解码

我一般是这么解决的:

  •  【必须】在脚本开头加入以下代码,为使内部编解码的“中间过程”不使用ascii 解码器。防止出现’ ‘ascii’ codec can’t decode/encode byte 0x99 in position 4-6’

  • 写一个“规范化字符串”用的函数,这样得到的字符串可直接用于打印,且因为有errors处理,不会出现‘‘gbk’ codec cannot decode/encode byte 0x99 in position xxx’的错误(第二个参数指定error处理,可选有’ignore’丢弃, ‘replace’用?代替)

  • 在脚本开头加入编码定义语句。当然你不怕死也可以用gbk

这样之后,在代码中如果出现

之类的语句时,需要在字符串后面加上.decode(‘utf-8’)变成

因为你的代码是utf-8编码的

  • 如果你和我一样用的是pydev+eclipse写的代码,为了方便windows环境调试起见,可以把控制台的编码改成和windows一样挫的gbk。方法是:Run->Run configuration->Common->Encoding->Others填入GBK或者cp936

写完了~真开森~

参考资料:

http://hi.baidu.com/mdj_hu/item/4d7d0803d38e62e1fe240de4

http://www.jb51.net/article/26543.htm(不推荐,看完晕过去)