python 在Shell中显示中文乱码解决

来源:互联网 发布:gre词汇精选淘宝 编辑:程序博客网 时间:2024/06/03 04:41

在python中使用mechanize从网上拉下一张网页,使用read()读取页面内容后,print显示。在IDE(Eclipse)中直接运程序后,显示中文正常。但在Shell中测试时,read()后print的显示就是乱码了。

程序源码

from mechanize import Browserbr=Browser()r=br.open("http://www.######.net")s=r.read()print s

运行后显示:

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta content="中国#######网上营业厅,中国########"  name="keywords" />

一切正常,但在Shell中测试时,按行输入上述代码,显示却是:

'\xef\xbb\xbf<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n<html xmlns="http://www.w3.org/1999/xhtml">\r\n<head>\r\n    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r\n    <meta content="\xe4\xb8\xad\xe5\x9b\.....

使用decode('utf8')转码后,显示仍为:

u'\ufeff<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n<html xmlns="http://www.w3.org/1999/xhtml">\r\n<head>\r\n    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r\n    <meta content="\u4e2d\u56fd\....

多次查询后,发现问题在输出的前几个字符“'\ufeff”,去除这个字符后,显示就正常了。

假定使用如下语句获得输出:

s=r.read()

在shell中使用“print s.decode("utf-8")[1:]”,输出就正常了。

网上说明原因为:

某些软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM),转码后是“'\ufeff”,因此我们在读取时需要自己去掉这些字符。

原创粉丝点击