0

ストアド プロシージャを使用して、mysql データベースからいくつかの行を取得しています。

私は非常に基本的な構文を使用しています:

retarr = []
cursor.callproc("employee_get", (-1, -1, -1))
for res in cursor.stored_results():
    retarr.append(res.fetchall())
cursor.close()
...

今。一部のデータ結果は Unicode 文字列です。データベース内の文字列のエンコードに UTF-8 を使用しています。接続で charset="utf8" と use_unicode=True を使用しています。

Unicode 文字を含むキャッチされたデータ (データ タプル全体) を印刷しようとすると、問題が発生します。お気に入り:

for row in retarr[0]:
    print(row)

最初にキャッチされた行を適切に出力します。しかし、最初のものにはユニコード文字がありません。次に 2 番目に、有名なエラーが表示されます: UnicodeEncodeError: 'ascii' codec can't encode character '\u0119' in position 19: ordinal not in range (128). どうしたの?私は非常に基本的な何かが欠けていると信じています。

標準の mysql コネクタである Python 3.3.2 を使用しています。OSX.

4

2 に答える 2

1

Unicode オブジェクトを印刷するには、何らかの方法でエンコードする必要があります。デフォルトのエンコーディングが ASCII の場合、128 ASCII 文字以外では失敗します。おそらくエンコーディングを指定する必要があります:

print(row.encode('utf-8'))
于 2013-10-21T10:09:45.913 に答える
1

問題は PYTHONIOENCODING 環境変数にありました。/etc/launchd.conf に設定し (ファイルシステムにファイルがありませんでした)、システムを再起動すると、すべての問題が解消されました。

于 2013-10-21T13:48:59.300 に答える