URL字符串中的UTF8字符

2024-09-28 22:23:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个小Python脚本来解析一个网站。 我从一个类似http://foo.com/h\u00e4ppo的链接中得到了一个\u00e4形式的“ä”字符,我需要http://foo.com/häppo。在


Tags: 脚本comhttpfoo网站链接字符形式
2条回答

您的字符\u00e4已经正确。这实际上是ä。在

有时,字符串的表示(repr)将以转义形式显示,就像反斜杠\将显示为转义的\\。这部分很好。在

实际问题

实际的问题是你不能在URL中使用。只有一小部分的ASCII字符在url中有效(请参见Which characters make a URL invalid?)。在

所以,你必须转义你的部分网址。在

>>> urllib.parse.quote('ä')
'%C3%A4'

>>> urllib.parse.quote('\u00e4')  # same thing
'%C3%A4'

但是请注意不要转义整个URL,只转义其中实际要转义的字符串的部分。例如,这是错误的:

^{pr2}$

你要做的是:

>>> 'https://www.google.com/?q=' + urllib.parse.quote('\u00e4')
'https://www.google.com/?q=%C3%A4'

试试看会发生什么:https://www.google.com/?q=%C3%A4

不幸的是,这在很大程度上取决于您解析的站点的编码,以及您的本地IO编码。在

我不确定你是否能在解析后翻译它,以及它是否真的值得做。如果有机会再次解析它,可以尝试使用python的decode()函数,例如:

text.decode('utf8')

除此之外,检查上面使用的编码是否与本地环境中的编码相同。这在Windows环境中特别重要,因为它们使用cp1252作为标准编码。在

在Mac和Linux中:export PYTHONIOENCODING=utf8 在Windows中:set PYTHONIOENCODING=utf8

虽然不多,但我希望能有所帮助。在

相关问题 更多 >