URL字符串中的UTF8字符

时间:2016-09-29 19:55:16

标签: python url encoding

我写了一个解析网站的小脚本。 我在\u00e4这样的链接的网址中以http://foo.com/h\u00e4ppo的形式获得了一个“ä”字符,我需要http://foo.com/häppo

2 个答案:

答案 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

它并不多,但我希望它有所帮助。