乱码在哪种语言里都会出现,初学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的默认编码