1

看那个:

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)

在生产中,输入是统一编码的。

4

6 回答 6

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
于 2010-06-24T22:08:43.070 回答
2

我想要 ascii 中的输出而不是 utf-8

那不是 ASCII,它没有映射到 0x80 以上的字符。您说的是 ISO-8859-1,或者可能是代码页 1252(基于它的 Windows 编码)。

'Ã'.decode('iso-8859-1')

好吧,这取决于您用来将字符保存Ã在源代码中的编码,不是吗?听起来您的文本编辑器已将其保存为 UTF-8。(这是一件好事,因为 ISO-8859-1 等特定于语言环境的编码需要尽快消​​失。)

根据PEP 263告诉 Python 你保存的源文件是 UTF-8 格式:

# coding=utf-8

urllib.quote(u'Ã'.encode('iso-8859-1'))    # -> %C3

或者,如果您不想那么麻烦,请使用反斜杠转义:

urllib.quote(u'\u00C3'.encode('iso-8859-1'))    # -> %C3

虽然,无论哪种方式,现代 web 应用程序都应该使用 UTF-8 作为输入,而不是 ISO-8859-1/cp1252。

于 2010-06-24T22:04:42.230 回答
2

很好的 asciification 是这样的:

import unicodedata
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore')
于 2010-06-24T22:04:55.253 回答
1

如果您的输入实际上是 UTF-8 并且您希望 iso-8859-1 作为输出(不是 ASCII),那么您需要的是:

'ñ'.decode('utf-8').encode('iso-8859-1')
于 2010-06-24T22:02:13.090 回答
0

感谢所有解决方案。你们所有人都汇聚到同一个点。我把正确的代码弄得一团糟

.encode('iso-8859-1') 

.decode('iso-8859-1')

回到 .encode('iso-8859-1') 就可以了。

于 2010-06-25T17:51:37.680 回答
0

unihandecode

Unicode 文本的 US-ASCII 音译。
Python unidecode 的改进版本,即 Sean M. Burke 的 Text::Unidecode Perl 模块的 Python 端口。

pip install Unihandecode

然后在python

import unihandecode
print(unihandecode.unidecode(u'Ã'))

打印A

于 2015-06-04T17:05:14.560 回答