0

我在使用xlrdmysqldb. 我正在阅读一个包含土耳其语字符的 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 回答