Pythonを使用した単純なASCII URLエンコード
-
29-09-2019 - |
質問
それを見てください:
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)
生産時には、入力が単一コード化されます。
解決 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
UTF-8の代わりにASCIIの出力が必要です
それはASCIIではなく、0x80を超えるマップされた文字がありません。 ISO-8859-1、またはおそらくコードページ1252について話している(それに基づいてエンコードするウィンドウ)。
'Ã'.decode('iso-8859-1')
さて、それはあなたがキャラクターを保存するために使用したエンコードに依存します Ã
ソースではそうですか?テキストエディターがUTF-8として保存したようです。 (ISO-8859-1のようなロケール固有のエンコーディングができるだけ早く離れる必要があるため、それは良いことです。)
保存したソースファイルはUTF-8であることをPythonに伝えてください PEP 263:
# coding=utf-8
urllib.quote(u'Ã'.encode('iso-8859-1')) # -> %C3
または、その手間が不要な場合は、バックスラッシュエスケープを使用してください。
urllib.quote(u'\u00C3'.encode('iso-8859-1')) # -> %C3
いずれにせよ、最新のWebAppは、ISO-8859-1/CP1252ではなく、その入力にUTF-8を使用する必要があります。
かなりうまく機能しているのはこの方法です:
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の改良バージョン、つまりPythonポートオブテキスト:: Sean M. BurkeによるUnideCode Perlモジュール。
pip install Unihandecode
その後 python
import unihandecode
print(unihandecode.unidecode(u'Ã'))
プリント A
.