我写了一个解析网站的小脚本。
我在\u00e4
这样的链接的网址中以http://foo.com/h\u00e4ppo
的形式获得了一个“ä”字符,我需要http://foo.com/häppo
。
答案 0 :(得分:0)
你拥有的角色\u00e4
已经是正确的。事实上,这是ä
。
有时,字符串的表示形式(repr
)会以转义形式显示它,就像反斜杠\
将显示为转义\\
一样。那部分没问题。
实际问题是您无法在URL中使用ä。只有一小部分ASCII字符在URLS中有效(参见Which characters make a URL invalid?)。
因此,您必须转义部分网址。
>>> urllib.parse.quote('ä')
'%C3%A4'
>>> urllib.parse.quote('\u00e4') # same thing
'%C3%A4'
但要小心不要逃避整个网址,只有部分内容是要转义的实际字符串。例如,这是错误的:
>>> urllib.parse.quote('https://www.google.com/?q=\u00e4')
'https%3A//www.google.com/%3Fq%3D%C3%A4'
你想做的事:
>>> 'https://www.google.com/?q=' + urllib.parse.quote('\u00e4')
'https://www.google.com/?q=%C3%A4'
试一试,看看会发生什么:https://www.google.com/?q=%C3%A4
答案 1 :(得分:0)
不幸的是,这在很大程度上取决于您解析的站点的编码以及本地IO编码。
我不确定你是否可以在解析之后翻译它,并且它是否真的值得工作。如果你有机会再次解析它,你可以尝试使用python的decode()
函数,如:
text.decode('utf8')
除此之外,请检查上面使用的编码是否与本地环境中的编码相同。这在Windows环境中尤为重要,因为它们使用cp1252
作为标准编码。
在Mac和Linux中:export PYTHONIOENCODING=utf8
在Windows中:set PYTHONIOENCODING=utf8
它并不多,但我希望它有所帮助。