python乱码

乱码在哪种语言里都会出现,初学python会遇到很多莫名的乱码问题,这儿提供几种常见的解决python中文乱码的方法。

问题一

描述:
在python编写代码时,可能在运行时出现些中文字符解析不了

File "BeautifulSoup.py", line 21
SyntaxError: Non-ASCII character '\xe6' in file BeautifulSoup.py on line 21, but
no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

解决方案:
在编写python文件开始部分添加上:

# !/usr/bin/python
# -*- coding: utf-8 -*-

注意:
第二行代码:#coding=utf-8要添加在文件头的第一行或者第二行,否则不起效果

问题二

描述:
在使用python抓取网页时,会需要解析utf-8解码为unicode,会使用如下语句:
response.read().decode('utf-8')
可是在某些网页上面会出现一些非法字符,导致解码无法正常进行,报如下错误:

Traceback (most recent call last):
File "demo.py", line 22, in <module>
content = response.read().decode('utf-8')
File "D:\develop\python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 31602-31603: inv
alid continuation byte

解决方案:
1、可能是因为在某些网页中会出现一些表情类字符((utf8mb64)编码),导致无法正常解析,所以使用如下语句来忽略某些非法字符:
content = response.read().decode('utf-8','ignore')
2、可以将某些已知的非法字符替换成’’来保证编码的正确性
content = response.read().decode().replace('无法正常解析的编码','')

问题三

描述:
在python格式文件中:
1、保存为ansi格式的demo.py:

# !/usr/bin/python
# -*- coding: utf-8 -*-
print '你好'

直接运行python demo.py可以直接运行
2、保存为utf-8格式的demo.py,必须要在中文前面加上u,不然会出现乱码问题:

# !/usr/bin/python
# -*- coding: utf-8 -*-
print '你好'

打印出来的效果如下:浣犲ソ,此时需要将print u'你好'即可正常打印中文

问题四

描述:
python安装的时候,默认编码是ascii。
可以在python的命令行环境下敲入,来查看python的默认编码格式:

import sys
sys.getdefaultencoding()  

当程序出现了非ascii编码时,python程序会报如下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position
python无法处理非ascii的编码,此时就需要设置自己的python默认编码。
解决方案:
1、在程序中加入如下的代码来设置编码为’utf-8’:

import sys  
reload(sys)  
sys.setdefaultencoding('utf8') 

2、在python的安装文件下Lib\site-packages文件夹下新建一个sitecustomize.py,内容为:

# encoding=utf8  
import sys  
reload(sys)  
sys.setdefaultencoding('utf8') 

如此在执行sys.getdefaultencoding()查看python的默认编码