0

と を使用しているときに、Python でのエンコードに問題がxlrdありmysqldbます。トルコ語の文字を含む Excel ファイルを読み込んでいます。

そのような値を出力すると、コンソールにprint sheet.cell(rownum,19).value書き込まİstanbulれます。これは正しいです。(Win7 Lucida ConsoleLine、エンコーディングは `cp1254)

ただし、その値を次のようにデータベースに挿入したい場合

sql = "INSERT INTO city (name) VALUES('"+sheet.cell(rownum,19).value+"')"
cursor.execute (sql)
db.commit()

エラーを与える

Traceback (most recent call last):
File "excel_employer.py", line 112, in <module> cursor.execute (sql_deneme)
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 157, in execute
    query = query.encode(charset)
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u0130' in position
    41: ordinal not in range(256)

SQLを次のように変更すると

sql = "INSERT INTO city (name) VALUES('"+sheet.cell(rownum,19).value.encode('utf8')+"')"

値はエラーなしで挿入されますが、Ä°stanbul

İstanbul値をそのままデータベースに入れる方法を教えてください。

4

1 に答える 1

1

@Kazarkが言ったように、mysqlのコネクタのエンコーディングが設定されていない可能性があります。

conn = MySQLdb.connect(
    host="localhost",
    user="root",
    passwd="root",
    port=3306,
    db="test1",
    init_command="set names utf8"
    )

mysql の python コネクタを初期化するときに、これを試してください。ただし、挿入されたコンテンツが utf-8 であることを確認してください。

于 2014-09-28T03:42:31.513 に答える