Python在下载带有mechanize的网页后写入奇怪字符

Python在下载带有mechanize的网页后写入奇怪字符,python,python-2.7,character-encoding,mechanize-python,Python,Python 2.7,Character Encoding,Mechanize Python,我在下载网页和处理网页时遇到问题。我想做的是: 使用mechanize将网页下载到变量中 打印出该网页(在写入文件进行进一步处理之前) 在网页上搜索给定的单词(这将是未来的研究),并计算我找到的单词数量 我的问题是字符编码,因为我 <title>csonthãᄅjas termãᄅsek - wikipãᄅdia</title> Chardet说它有ISO-8859-2字符编码,但当我更改脚本编码时,没有任何变化。当我尝试将网页编码或解码为任何字符集时,会出现一个错

我在下载网页和处理网页时遇到问题。我想做的是:

  • 使用mechanize将网页下载到变量中
  • 打印出该网页(在写入文件进行进一步处理之前)
  • 在网页上搜索给定的单词(这将是未来的研究),并计算我找到的单词数量
我的问题是字符编码,因为我

<title>csonthãᄅjas termãᄅsek - wikipãᄅdia</title>
Chardet说它有ISO-8859-2字符编码,但当我更改脚本编码时,没有任何变化。当我尝试将网页编码或解码为任何字符集时,会出现一个错误(“无效的连续字节”或“序号不在范围(128)”中”

我尝试了许多编码,不同的浏览器代理,用chardet检测编码,然后使用这些信息,但没有解决我的问题。我知道这是一个简单的问题,但我找不到正确的答案。我使用Windows 8.1和Python 2.7.6

我的代码如下所示(我尝试将其简化为尽可能简单):


页面显示为UTF-8格式。获取
文本
并打印
文本。解码('UTF-8')
。当我使用
请求
模块阅读页面内容时,这对我很有效

您需要删除
lower()
调用,因为转换为小写可能会损坏UTF-8编码的文本。如果要转换为小写,请在解码后调用
lower()


使用
#-*-编码
行时,设置脚本文件的编码。这对脚本文件读取的数据没有影响。若要处理不同编码的文本数据,需要在读入数据后对其进行解码。

无需更改脚本文件的编码,只需对已读取的数据进行解码ownload.谢谢,我认为脚本的编码不仅会影响脚本本身,还会影响整个程序。我试图
打印文本。解码('utf-8')
,但我得到了UnicodeDecodeError:'utf8'编解码器无法解码位置108-109的字节:无效的连续字节错误。然后我试图将行更改为
结果=br.open(url)。read().lower().decode('utf-8')
但我也遇到了同样的问题。当我尝试所有东西时,我意外地删除了
.lower()
部分,它就像一个奇迹:我到处都能看到正确的字符。我应该把解决方案写到其他地方吗?@KárolySzommer:我没有注意到你有
lower()
在那里调用。您需要将其去掉,因为文本中的大写字符可能不是“真实”字符,但只是两字节UTF-8编码字符的一部分。如果要转换为小写,请在解码后调用
lower()
<title>csonthéjas termések - wikipédia</title>
print 'csonthéjas termések - wikipédia'
#!/usr/bin/python
# -*- coding: ISO-8859-2 -*-

def url_get(url_input): #Get the webpage
    "Get the webpage"
    import mechanize
    url = url_input
    br = mechanize.Browser()
    br.set_handle_equiv(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    #User-agent','Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)
    br.addheaders = [('user-agent', '   Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3'),
('accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')]
    result = br.open(url).read().lower()
    print result

    import chardet    
    rawdata = result
    detection = chardet.detect(rawdata)
    charenc = detection['encoding']
    print charenc

    return result

text = url_get('http://hu.wikipedia.org/wiki/Csonth%C3%A9jas_term%C3%A9sek')

print 'csonthéjas termések - wikipédia'