在Python中如何对百分号编码(URL)字符串进行编码/解码?

21

我该如何将百分号编码的字符解码为普通的Unicode字符?

"Lech_Kaczy%C5%84ski"    ⟶    "Lech_Kaczyński"

@PeterWood:我试过了,但是我得到的字符串是像Lech_Kaczy\xc5\x84ski这样的。现在我想知道如何将其转换为波兰字母。 - yak
1
可能是重复的问题:如何在Python中取消引用已编码的Unicode字符串? - Peter Wood
3个回答

29

对于Python 3,使用urllib.parse.unquote

from urllib.parse import unquote

print(unquote("Lech_Kaczy%C5%84ski"))

输出:

Lech_Kaczyński

导入错误,应该使用 from urllib.parse import unquote 来使导入正常工作。 - Mahmoud Elshahat

15

对于Python 2,使用urllib.unquote

import urllib
urllib.unquote("Lech_Kaczy%C5%84ski").decode('utf8')

这将返回一个Unicode字符串:

u'Lech_Kaczy\u0144ski'

您随后可以像往常一样打印和处理。例如:

print(urllib.unquote("Lech_Kaczy%C5%84ski").decode('utf8'))

将导致

Lech_Kaczyński

它给了我Lech_Kaczy\xc5\x84ski,而不是Lech_Kaczyński - yak
这看起来不像是一个Unicode字符串,你确定你尝试正确了吗?这是我的会话:...(我会在帖子中编辑它) - Matthias C. M. Troffaes
我不确定你甚至需要 decode 调用(仅基于在尝试时没有它也能正常工作)。 - Holloway
请确保将decode('utf8')放在最后。如果我在错误的位置解码,我只能重现你得到的结果。 - Matthias C. M. Troffaes
Trengot:从技术上讲,这并不是必需的。然而,在Python中,通常建议尽早将所有文本转换为Unicode,这样当您将其传递给其他函数时就不需要担心编码问题了。 - Matthias C. M. Troffaes
@yak,如果你的Python期望ASCII显示,那么你必须使用与UTF-8兼容的显示方法,否则它将不会尝试显示非ASCII符号。 - Jasen

1
这对我很有用:

这适合我:

import urllib

print urllib.unquote('Lech_Kaczy%C5%84ski')

打印输出。
Lech_Kaczyński

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接