1

私のアプリケーションは、リモートの MySQL データベースからいくつかのデータをダウンロードします。問題は、db が文字列を utf8 として保存することです。しかし、受信したデータはASCIIデコードされています。これを回避するには?

コード :

cursor = conn.cursor()
query = """MY QUERY HERE"""
cursor.execute(query)
result = cursor.fetchall()
4

4 に答える 4

2

おそらく例が適切です-ここでは、ユニコード文字列「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 文字列にデコードし、プログラムの出力を消費しているものは何でも、出力で再エンコードする必要があります...通常、何かモデルが必要ですお気に入り:

  1. 入力データ -- 入力エンコーディングからユニコードに変換 [string.decode('utf8')]
  2. プロセス データ -- Unicode オブジェクトのみを扱う
  3. 出力結果 -- Unicode から出力エンコーディング [string.encode('utf8')] に変換

これにより、エンコードとデコードが明確に分離され、コアが Unicode のみを処理するため、エンコード処理コードがアプリケーション全体に広がるのを回避できます。

于 2010-12-24T21:22:45.220 に答える
0

あなたは試してみたいかもしれませんstring.encode('ascii').decode('utf-8')か?

于 2010-12-24T15:32:42.620 に答える
0

conn.set_character_encoding('utf8')データベースからクエリを実行する前に実行します。

于 2010-12-28T12:45:04.073 に答える
-1

Python を utf-8 エンコーディングに設定するだけで、もう心配する必要はありません。データをロードするためにdb2 / mongodbでこの問題が発生しました。

site.py の下で defaultencoding を utf-8 に設定するだけです。

@ http://blog.ianbicking.org/illusive-setdefaultencoding.htmlをご覧ください

于 2010-12-24T18:30:04.893 に答える