我正在使用Python 2.7和MySQLdb 1.2.3。我嘗試了一切,我發現在stackoverflow和其他論壇來處理編碼錯誤我的腳本扔。 我的腳本從源MySQL數據庫中的所有表中讀取數據,將它們寫入python StringIO.StringIO
對象中,然後將該數據從StringIO
對象加載到Postgres數據庫(顯然採用UTF-8編碼格式。屬性 - 在pgadmin中定義數據庫)使用psycopg2庫的copy_from命令。UnicodeEncodeError:'ascii'編解碼器無法編碼字符u' u2019'在位置47:序號不在範圍內(128)
我發現我的源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)
我寫了下面的代碼行清洗細胞源MySQL數據庫的每個表寫入到StringIO對象時。
cell = str(cell).replace("\r", " ").replace("\n", " ").replace("\t", '').replace("\"", "") #Remove unwanted characters from column value
請幫忙。
因此,單元格是表格中行的列值(來自源MySQL數據庫,我強制以任何方式強制執行UTF-8讀取,如上所示)。 細胞可以容納任何從1,50,100,「羅伯特」,「這是一個句子」等 – user3422637 2014-10-29 21:38:45
嘗試'印刷repr(細胞)',這將是更有幫助(尤其是當它崩潰) – 2014-10-29 21:40:22
我剛剛嘗試過並在str()發生之後。我有這樣的事情: 對於兩個細胞 的出現之前,STR():2L STR()之後: '2' STR之前():u'Jog」 STR()之後: '滾輪' 程序不會爲這些單元格的btw值而崩潰。我不能在這裏寫出單元格中的文字,但我可以告訴你這是一個長句,並且有一個撇號''' – user3422637 2014-10-29 21:55:43