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

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

程序源码

from mechanize import Browser

br=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”,因此我们在读取时需要自己去掉这些字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值