1

それを見てください:

import urllib
print urllib.urlencode(dict(bla='Ã'))

出力は

bla=%C3%BC

必要なのは単純です。utf-8ではなくasciiで出力する必要があるため、次の出力が必要です。

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

utf-8 ではなく ascii で出力したい

これは、0x80 より上にマップされた文字がない ASCII ではありません。あなたはISO-8859-1、またはおそらくコードページ1252(それに基づくWindowsエンコーディング)について話している。

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

Ãそれは、ソースに文字を保存するために使用したエンコーディングに依存しますよね? テキスト エディタで UTF-8 として保存されているようです。(ISO-8859-1 のようなロケール固有のエンコーディングはできるだけ早く廃止する必要があるため、これは良いことです。)

保存したソース ファイルがPEP 263に従って UTF-8 であることを Python に伝えます。

# coding=utf-8

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

または、その面倒を望まない場合は、バックスラッシュ エスケープを使用します。

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

いずれにせよ、最新の Web アプリケーションは、入力に ISO-8859-1/cp1252 ではなく UTF-8 を使用する必要があります。

于 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 に答える