首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

urllib获取网页内容碰到了乱码

2012-12-28 
urllib获取网页内容遇到了乱码!import urllibprint urllib.urlopen(http://www.hack921.cn).read()汉字

urllib获取网页内容遇到了乱码!


import urllib
print urllib.urlopen('http://www.hack921.cn').read()


汉字部分出现了像“\xef\xbb\xbf ”这样的乱码;经过分析,该网页没有进行编码设定,urllib是把这个网页的编码当什么字符编码进行处理了呢?该如何把这种字符编码转换成汉字呢???
[最优解释]
我在Linux上是没问题的。Windows可能没自动处理bom?要不你试下utf-8-sig:
import urllib
print urllib.urlopen('http://www.hack921.cn').read().decode('utf-8-sig')

[其他解释]
原来那个几个自己是本身页面上带的,我试着存了一下:


import urllib
l= urllib.urlopen('http://www.hack921.cn')
f = codecs.open(r'C:\WORK\build\build.properties', 'wb')

f.writelines(l.read())


[其他解释]
import urllib
print urllib.urlopen('http://www.hack921.cn').read().decode('utf-8')

[其他解释]
Traceback (most recent call last):
  File "C:\Users\gao\Desktop\Untitled 4.py", line 3, in <module>
    print urllib.urlopen('http://www.hack921.cn').read().decode('utf-8')
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 0: ordinal not in range(128)

不行的啊!
[其他解释]
试下:


import urllib
print urllib.urlopen('http://www.hack921.cn').read().decode('gbk')




或者直接看看该网页自己声明的 编码
[其他解释]
Traceback (most recent call last):
  File "C:\Users\gao\Desktop\Untitled 4.py", line 2, in <module>
    print urllib.urlopen('http://www.hack921.cn').read().decode('gbk')
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence

不行的。他的网页编码未定义啊!
[其他解释]
编码是u8-dos,使用utf8解码是对的,看看是哪出了问题。
[其他解释]
import urllib
print urllib.urlopen('http://www.hack921.cn').read().decode('utf-8')

在windows xp python2.5下正常显示,我刚刚测试过
[其他解释]
页面是utf8的,在window命令行下print需要转为gbk,使用gb18030是因为他相比gb2312支持更多的字符

import urllib
print urllib.urlopen('http://www.hack921.cn').read().decode('utf-8','ignore').encode('gb18030')


[其他解释]
测试了下,6楼的应该没问题。
[其他解释]
7楼的不行,我是VISTA机器,提示编码错误
6楼的在python shell下可以正常显示,但是在windows下的ide(gbk编码)就不行啊
[其他解释]
import urllib

def mdcode( str ):
    for c in ('utf-8', 'gbk', 'gb2312'):    
        try:
            return str.decode(c).encode( 'utf-8' )


        except:
            pass 
    return 'unknown'


print mdcode(urllib.urlopen('http://www.hack921.cn').read())


[其他解释]
hao 支持一下
[其他解释]
"xef\xbb\xbf" 这个三个字节不是汉字的乱码,是UTF8的BOM字节

我觉得这个不是你取下来的东西,可能打印的时候出来的问题,你试着别把取到的数据打印出来,存到文件里去看看。

在Http的传输过程中,他可能是用压缩的方式进行传输的,你得指定一些Http的header才能达到目的。

以上为鄙人愚见。
[其他解释]
我来看6楼的
[其他解释]
看看六楼说的啥

热点排行