Python 中简单的 ASCII URL 编码
看看这个:
import urllib
print urllib.urlencode(dict(bla='Ã'))
输出是
bla=%C3%BC
我想要的很简单,我希望输出是ascii格式,而不是utf-8,所以我需要这样的输出:
bla=%C3
如果我尝试:
urllib.urlencode(dict(bla='Ã'.decode('iso-8859-1')))
这样不行(我所有的python文件都是utf-8编码的):
'ascii' 编码无法在位置 0-1 编码字符:序号不在范围(128)内
在实际应用中,输入是以unicode格式来的。
6 个回答
2
我想要输出的是ascii格式,而不是utf-8。
其实那不是ascii,因为ascii没有0x80以上的字符。你说的可能是ISO-8859-1,或者是代码页1252(这是基于它的Windows编码)。
'Ã'.decode('iso-8859-1')
这就要看你在源文件中是用什么编码保存字符Ã
了,对吧?听起来你的文本编辑器是以UTF-8格式保存的。(这其实很好,因为像ISO-8859-1这样的特定地区编码应该尽快淘汰。)
告诉Python你保存的源文件是UTF-8格式的,按照PEP 263的要求:
# coding=utf-8
urllib.quote(u'Ã'.encode('iso-8859-1')) # -> %C3
或者,如果你不想麻烦,可以使用反斜杠转义:
urllib.quote(u'\u00C3'.encode('iso-8859-1')) # -> %C3
不过,无论如何,现代的网页应用应该使用UTF-8作为输入,而不是ISO-8859-1或cp1252。
4
看看这个链接:在Python中进行Unicode音译:
from unidecode import unidecode
print unidecode(u"\u5317\u4EB0")
# That prints: Bei Jing
在你的情况下:
bla='Ã'
print unidecode(bla)
'A'
这是一个第三方库,可以很简单地通过以下方式安装:
$ git clone http://code.zemanta.com/tsolc/git/unidecode
$ cd unidecode
$ python setup.py install
0
感谢大家提供的解决方案。你们的思路都差不多。
.encode('iso-8859-1')
我把正确的代码搞得一团糟。
.decode('iso-8859-1')
最后我把它改回了.encode('iso-8859-1'),这样就能正常工作了。