简单的ASCII URL编码Python
-
29-09-2019 - |
题
看那个:
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' codec can't encode characters in position 0-1: ordinal not in range(128)
在生产中,输入是无编码的。
解决方案 5
感谢所有解决方案。你们所有人都聚集到同一点。我弄乱了正确的代码
.encode('iso-8859-1')
到
.decode('iso-8859-1')
回到.encode('ISO-8859-1')并起作用。
其他提示
看一下 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
我想要在ASCII而不是UTF-8中输出
那不是ASCII,没有字符映射到0x80以上。您是在谈论ISO-8859-1,或者可能是代码第1252页(基于它的窗口编码)。
'Ã'.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
尽管无论哪种方式,现代的WebApp都应使用UTF-8进行输入而不是ISO-8859-1/CP1252。
这种方式工作非常好:
import unicodedata
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore')
如果您的输入实际上是UTF-8,并且您希望ISO-8859-1作为输出(不是ASCII)您需要的是:
'ñ'.decode('utf-8').encode('iso-8859-1')
包裹 unihandecode
是
Unicode文本的US-ASCII音译。
Python Unidecode的改进版本,这是Sean M. Burke的Text :: Unidecode Perl模块的Python端口。
pip install Unihandecode
然后进 python
import unihandecode
print(unihandecode.unidecode(u'Ã'))
印刷 A
.