use*_*637 6 python mysql postgresql encoding
我使用的是Python 2.7和MySQLdb 1.2.3.我尝试了在stackoverflow和其他论坛上找到的所有内容来处理我的脚本抛出的编码错误.我的脚本从源MySQL DB中的所有表读取数据,将它们写入python StringIO.StringIO对象,然后将该数据从StringIO对象加载到Postgres数据库(显然是UTF-8编码格式.我通过查看属性找到了这个 -使用psycopg2库的copy_from命令在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;')
Run Code Online (Sandbox Code Playgroud)
我仍然得到了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)
Run Code Online (Sandbox Code Playgroud)
在写入StringIO对象时,我编写了以下代码行来清理源MySQL数据库的每个表中的单元格.
cell = str(cell).replace("\r", " ").replace("\n", " ").replace("\t", '').replace("\"", "") #Remove unwanted characters from column value
Run Code Online (Sandbox Code Playgroud)
请帮忙.
Jor*_*ley 10
str(cell)正在尝试转换cell为ASCII.ASCII仅支持序数小于255的字符.什么是单元格?
如果cell是unicode字符串,只需执行cell.encode("utf8"),这将返回编码为utf 8的字节字符串
......或者真的是iirc.如果你传递mysql unicode,那么数据库会自动将它转换为utf8 ...
你也可以试试,
cell = unicode(cell).replace("\r", " ").replace("\n", " ").replace("\t", '').replace("\"", "")
Run Code Online (Sandbox Code Playgroud)
或者只是使用第三方库.有一个很好的将为您修复文本.
| 归档时间: |
|
| 查看次数: |
19643 次 |
| 最近记录: |