看看:
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)
在制作中,输入是无法编码的。
答案 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)
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)
Unicode文本的US-ASCII音译 一个改进版的Python unidecode,是Sean M. Burke的Text :: Unidecode Perl模块的Python端口。
pip install Unihandecode
然后在python
import unihandecode
print(unihandecode.unidecode(u'Ã'))
打印A
。