我使用的是Python 2.7和MySQLdb 1.2.3。我尝试了在stackoverflow和其他论坛上找到的所有东西来处理我的脚本引发的编码错误。我的脚本从源MySQL数据库中的所有表中读取数据,将它们写入python StringIO.StringIO
对象中,然后将数据从StringIO
对象加载到Postgres数据库(显然是UTF-8编码格式。我通过使用psycopg2库的copy_from命令查看Properties——pgadmin中的数据库定义找到了这一点。
我发现我的源MySQL数据库中有一些表采用latin_swedish_ci编码,而另一些则采用utf_8编码格式(这是从information_schema.tables中的TABLE_COLLATION中找到的)。
我根据对互联网的研究,在Python脚本的顶部写下了所有这些代码。
db_conn = MySQLdb.connect(host=host,user=user,passwd=passwd,db=db, charset="utf8", init_command='SET NAMES UTF8' ,use_unicode=True)
db_conn.set_character_set('utf8')
db_conn_cursor = db_conn.cursor()
db_conn_cursor.execute('SET NAMES utf8;')
db_conn_cursor.execute('SET CHARACTER SET utf8;')
db_conn_cursor.execute('SET character_set_connection=utf8;')
我仍然得到下面的UnicodeEncodeError
,这行:cell = str(cell).replace("r", " ").replace("n", " ").replace("t", '').replace(""", "") #Remove unwanted characters from column value
,
UnicodeEncodeError: 'ascii' codec can't encode character u'u2019' in position 47: ordinal not in range(128)
在写入StringIO对象时,我编写了以下一行代码来清理源MySQL数据库的每个表中的单元格。
cell = str(cell).replace("r", " ").replace("n", " ").replace("t", '').replace(""", "") #Remove unwanted characters from column value
请帮忙。
str(cell)
正在尝试将cell
转换为ASCII。ASCII仅支持序数小于255的字符。什么是细胞?
如果cell
是unicode字符串,只需执行cell.encode("utf8")
,它将返回一个编码为utf8的字节串
或者真的是iirc。如果您传递mysql unicode,那么数据库将自动将其转换为utf8…
你也可以试试,
cell = unicode(cell).replace("r", " ").replace("n", " ").replace("t", '').replace(""", "")
或者只使用第三方库。有一个很好的可以为您修复文本。