我正在使用Python 2.7和MySQLdb 1.2.3。我尝试了stackoverflow和其他论坛上找到的所有内容来处理脚本抛出的编码错误。
我的脚本从源MySQL数据库中读取数据,将其写入Python的StringIO.StringIO对象,然后使用psycopg2库的copy_from命令从StringIO对象加载数据到Postgres数据库(显然是以UTF-8编码格式。我通过在pgadmin中查看数据库属性 - 数据库定义来发现这一点)。
我发现我的源MySQL数据库有一些表采用latin1_swedish_ci编码,而另一些表则采用utf_8编码格式(从information_schema.tables的TABLE_COLLATION中发现)。
我根据在互联网上的研究,在我的Python脚本顶部编写了所有这些代码。
我在将MySQL数据库中的所有表写入StringIO对象时,编写了以下代码以清除单元格。
我的脚本从源MySQL数据库中读取数据,将其写入Python的StringIO.StringIO对象,然后使用psycopg2库的copy_from命令从StringIO对象加载数据到Postgres数据库(显然是以UTF-8编码格式。我通过在pgadmin中查看数据库属性 - 数据库定义来发现这一点)。
我发现我的源MySQL数据库有一些表采用latin1_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("\"", "") #从列值中删除不需要的字符
。
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 47: ordinal not in range(128)
我在将MySQL数据库中的所有表写入StringIO对象时,编写了以下代码以清除单元格。
cell = str(cell).replace("\r", " ").replace("\n", " ").replace("\t", '').replace("\"", "") #Remove unwanted characters from column value
请帮忙。
isinstance(cell.encode("utf8"),str)
...但是Unicode也有replace方法...我不明白为什么你要在cell
对象上调用str
。 - Joran Beasley