0

まず、私はPythonにかなり慣れていないので、すべてのn00bのことを許してください。したがって、Python のアプリケーション ロジックは次のようになります。

  1. SQL Select をデータベースに送信すると、データの配列が返されます。
  2. このデータを取得して、別の SQL 挿入文で使用する必要があります。

問題は、SQL クエリが Unicode 文字列を返すことです。select からの出力は次のようになります。

(u'Abc', u'Lololo', u'Fjordk\xe6r')

最初に文字列に変換しようとしましたが、3 番目の要素にドイツ語の「ae」文字が含まれているため失敗します。

for x in data[0]:
    str_data.append(str(x))

私は取得しています: UnicodeEncodeError: 'ascii' コーデックは位置 6 の文字 u'\xe6' をエンコードできません: 序数が範囲外です(128)

TypeError が発生したときにも挿入するために Unicode をそのまま挿入できます。TypeError: Unicode への強制: 文字列またはバッファが必要です。NoneType が見つかりました

何か案は?

4

2 に答える 2

4

ここでの問題は、str関数がコードページを使用して Unicode を変換しようとすることasciiであり、コードページには(æ - char reference hereascii )のマッピングがありません。u\xe6

したがって、文字をサポートするコードページに変換する必要があります。現在、最も一般的なのはutf-8エンコーディングです。

>>> x = (u'Abc', u'Lololo', u'Fjordk\xe6r')
>>> print x[2].encode("utf8")
Fjordkær
>>> x[2].encode("utf-8")
'Fjordk\xc3\xa6r'

一方、それをcp1252 (それをサポートする西欧ラテン文字) に変換してみてください:

>>> x[2].encode("cp1252")
'Fjordk\xe6r'

しかし、イースターヨーロッパの文字セットcp1250はそれをサポートしていません:

>>> x[2].encode("cp1250")
...
UnicodeEncodeError: 'charmap' codec can't encode character u'\xe6' in position 6: character maps to <undefined>

Python での Unicode の問題は非常に一般的であり、次のことをお勧めします。

  • ユニコードとは何かを理解する
  • utf-8 とは何かを理解する (Unicode ではない)
  • ascii やその他のコードページを理解する
  • 推奨される変換ワークフロー: 入力 (任意の cp) -> Unicode に変換-> (プロセス) -> utf-8 に出力
于 2013-05-22T17:56:33.230 に答える