根据 python 的 urllib.urlopen,在标头中发送的编码是 iso-8859-1(尽管在这种情况下,firefox 的实时 http 标头似乎不同意我的看法 - 报告 utf-8)。在 xml 本身中没有指定编码 --> 这就是 xml.dom.minidom 假定它是 utf-8 的原因。
因此,以下内容应解决此特定问题:
import urllib
from xml.dom import minidom
sock = urllib.urlopen('http://www.google.com/ig/api?weather=Munich,Germany&hl=de')
s = sock.read()
encoding = sock.headers['Content-type'].split('charset=')[1] # iso-8859-1
doc = minidom.parseString(s.decode(encoding).encode('utf-8'))
编辑:在 Glenn Maynard 发表评论后,我更新了这个答案。我冒昧地从 Lennert Regebro 的答案中取出一行。