如何在python中编码unicode字符?

时间:2018-02-03 16:58:31

标签: python unicode

我正在尝试将unicode字符编码为特定格式,可以使用Python 2对其进行编码并发送到URL。

input = u"í"

required_output = "%CC%81"

import urllib

print urllib.quote('í') = "%C3%AD"

有没有办法如图所示进行编码,这样我就能得到所需的输出?

2 个答案:

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