我正在使用 Python 2.7 和 MySQLdb 1.2.3。我尝试了在 stackoverflow 和其他论坛上找到的所有内容来处理我的脚本抛出的编码错误。
我的脚本从源 MySQL 数据库中的所有表中读取数据,并将它们写入 python 中StringIO.StringIO
对象,然后加载该数据StringIO
使用 psycopg2 库的 copy_from 命令将对象复制到 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("\"", "") #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
请帮忙。