我正在尝试将unicode字符编码为特定格式,可以使用Python 2对其进行编码并发送到URL。
input = u"í"
required_output = "%CC%81"
import urllib
print urllib.quote('í') = "%C3%AD"
有没有办法如图所示进行编码,这样我就能得到所需的输出?
答案 0 :(得分:3)
>>> import unicodedata, urllib
>>> urllib.quote(unicodedata.normalize("NFD", u"í").encode('utf8'))
'i%CC%81'
答案 1 :(得分:3)
您将U+00ED LATIN SMALL LETTER I WITH ACUTE和不编码为单独的i
ASCII字母,其中包含将编码为CC 81的组合急性字符,因此U+0301 COMBINING ACUTE ACCENT。< / p>
如果您的输入数据合并,您必须将其分解为NFD或NFKD正常形式:
normalized = unicodedata.normalize("NFD", input).encode('utf8')
print urllib.quote(normalized)
请参阅Wikipedia Unicode article section on normal forms。
一般来说,为URL ,你应该坚持NFC正常形式!允许非ASCII数据的Internationalized Resource Identifier (IRI)使用NFC普通表单转换为网址,因此%C3%AD
是正确的格式,而不是i%CC%81
。