addresse1 = unicodedata.normalize( 'NFKD'、addresse1).encodeでより簡単により交換したいどのような文字を定義することができます'utf-8'、 'ignore')
おそらく、.encode('ascii', 'ignore')
、非ASCII文字を削除します。 UTF-8にはすべての文字が含まれているため、エンコードには何も取り除かれず、エンコードデコードサイクルはノーオペレーションです。
もっと良い解決策がありますか?
これは、実行することによって異なります。
あなたが唯一の発音記号を削除し、他のすべての非ASCII文字を失わないしたい場合は、NFKD、正規化後の各文字のunicodedata.category
を読むことができたし、あなたが翻字にしたい場合は、カテゴリM.
のものを削除しますカスタム置換が必要な言語固有の質問になるASCII(たとえば、ö
はoe
になりますが、スウェーデン語にはなりません)。
ASCII以外の文字を使用するとコードが破損するため、文字列をASCIIに変更したい場合は、そのコードを修正してすべてのUnicode文字が正常に動作するようにするのはもちろんです。文字è
はASCIIではエンコードできませんが、どちらも99ではありません。すべての文字の9989%が「特別」になることはほとんどありません。 ASCIIのみをサポートしているコードは不足しています。
GoogleジオコーディングAPIは、Unicodeと完全によく機能するため、これを行う必要がある明らかな理由はありません。
ETA:
url2= 'maps.googleapis.com/maps/api/geocode/json?address=' + addresse1 ...
ああ、あなたはURLに注入任意のデータをエンコードしURLする必要があります。これはUnicodeだけではありません。上のコードは多くのASCII句読記号でも破損します。複数のパラメータに変換するために、単一の文字列、またはurllib.encode
をエンコードするためにurllib.quote
を使用します。
params = dict(
address=address1.encode('utf-8'),
key=googlekey
)
url2 = '...?' + urllib.urlencode(params)
を(。Pythonの3で、それはurllib.parse.quote
とurllib.parse.encode
だと、彼らは自動的ので、手動でそこにエンコードする必要はありませんUTF-8を選択してください)
data2 = urllib.request.urlopen(url2).read().decode('utf-8')
data3=json.loads(data2)
json.loads
は、UTF-8デコードを省略しても安全です。
data3 = json.load(urllib.request.urlopen(url2))
[実用的なUNICODE](http://nedbatchelder.com/text/unipain/:あなたが持っているべきではありませんので、とにかく
json.load
は、すべての文字列にデータをロードするために、ファイルのようなオブジェクトから直接読み込みますunipain.html#1)と[すべてのソフトウェア開発者が絶対に最低限必要な、絶対にUnicodeと文字セットについて知っておく必要がある](http://www.joelonsoftware.com/articles/Unicode.html) 'エンコード'と 'デコード'とは何ですか(そしてなぜ彼らはあなたがここで望んでいるものでないのですか)。一般的に、文字列中のすべての文字を表すことができるエンコーディングを使用していると仮定して、* mystring.encode(my_encoding).decode(my_encoding)== mystring'を期待するべきです。 – lvcより良い解決策は、Unicodeを正しく処理するようにプログラムを修正することです。あなたが扱う方法を知らないデータを放棄することは決して良い解決策ではありません。 :)それでは、lvcのリンクを見てください。 –