1

私は、MySqlデータベースに基づいてmongoコレクションを作成するためのPythonスクリプトに取り組んでいます。問題はマイクロサイン文字にあります:

bson.errors.InvalidStringData: strings in documents must be valid UTF-8: '\xb5g'

異なるコード(utf-8、latin-1、cp1252、iso-8859-2)で値をエンコード/デコードしようとしましたが、成功しませんでしたが、常に次のエラーが発生します。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xb5 in position 0: ordinal not in   range(128)

これは、mysqlデータベースからデータを取得するためのコードです。データベースはUSDAのものです 0

    # -*- encoding: utf-8 -*-

    import MySQLdb
    mysqldb = MySQLdb.connect(DBCONF)
    cursor = mysqldb.cursor()
    foodid = 1001
    q = (
        ' SELECT nut.Nutr_Val,'
        ' nutdef.Units,'
        ' nutdef.NutrDesc, nutdef.Tagname'
        ' FROM food_des AS f'
        ' JOIN nutrient AS nut ON nut.NDB_No = f.NDB_No'
        ' JOIN nutrient_def AS nutdef ON nutdef.Nutr_No = nut.Nutr_No'
        ' WHERE f.NDB_No = %s'
    ) % str(foodid)
    self.cursor.execute(q)

マイクロサイン文字のフィールドはnutdef.Units1です。

4

1 に答える 1

1

文字を latin-1 としてデコードしてみてください:

a = '\xb5g'
# '\xb5g'
print a
# ?g

b = a.decode('latin-1')
print b
# µg

b
# u'\xb5g'

または、すべての CHAR、VARCHAR、および TEXT フィールドでユニコードを使用するように指示することで、MySQL 接続でこれを修正できます。

MySQLdb.connect(..., use_unicode=True)
于 2012-08-17T23:57:36.937 に答える