看那个:

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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top