私のアプリケーションは、リモートの MySQL データベースからいくつかのデータをダウンロードします。問題は、db が文字列を utf8 として保存することです。しかし、受信したデータはASCIIデコードされています。これを回避するには?
コード :
cursor = conn.cursor()
query = """MY QUERY HERE"""
cursor.execute(query)
result = cursor.fetchall()
おそらく例が適切です-ここでは、ユニコード文字列「u」を作成し、それをutf8としてエンコードし、それをutf8からユニコード文字列にデコードし、asciiとしてエンコードします(この文字列の拡張文字はASCII としてエンコードしない)、最後にエラーを "?" に置き換えて ASCII としてエンコードします。
Python 2.6.4 (r264:75706, Dec 7 2009, 18:43:55)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> u = u'abc\u2020123'
>>> u
u'abc\u2020123'
>>> u.encode('utf8')
'abc\xe2\x80\xa0123'
>>> s = _
>>> s.decode('utf8')
u'abc\u2020123'
>>> u.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2020' in position 3: ordinal not in range(128)
>>> u.encode('ascii', 'replace')
'abc?123'
>>>
おそらく、データベースから utf8 文字列を取得しています。これらを utf8 から unicode 文字列にデコードし、プログラムの出力を消費しているものは何でも、出力で再エンコードする必要があります...通常、何かモデルが必要ですお気に入り:
これにより、エンコードとデコードが明確に分離され、コアが Unicode のみを処理するため、エンコード処理コードがアプリケーション全体に広がるのを回避できます。
あなたは試してみたいかもしれませんstring.encode('ascii').decode('utf-8')
か?
conn.set_character_encoding('utf8')
データベースからクエリを実行する前に実行します。
Python を utf-8 エンコーディングに設定するだけで、もう心配する必要はありません。データをロードするためにdb2 / mongodbでこの問題が発生しました。
site.py の下で defaultencoding を utf-8 に設定するだけです。
@ http://blog.ianbicking.org/illusive-setdefaultencoding.htmlをご覧ください