用python编写简单的ascii url

时间:2010-06-24 21:52:52

标签: python urlencode turbogears turbogears2

看看:

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)

在制作中,输入是无法编码的。

6 个答案:

答案 0 :(得分:3)

查看unicode transliteration in python

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

答案 1 :(得分:2)

  

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

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

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

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

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

# 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。

答案 2 :(得分:2)

很好地工作asciification是这样的:

import unicodedata
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore')

答案 3 :(得分:1)

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

'ñ'.decode('utf-8').encode('iso-8859-1')

答案 4 :(得分:0)

感谢所有解决方案。你们所有人都趋同于同一点。 我弄乱了改变正确的代码

.encode('iso-8859-1') 

.decode('iso-8859-1')

转回.encode('iso-8859-1')并且它有效。

答案 5 :(得分: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