2011-11-23 27 views
2

我從MS-Excel的數據導入到PostgreSQL的python(2.6) Postgres的蟒蛇。數據使用<code>pyodbc</code>使用pyodbc

面臨的問題是:

有喜歡left single quotation mark(ANSI hex code : 0x91)等在Excel源字符。現在,當它使用pyodbc導入到PostgreSQL中時,它終止並出現錯誤DatabaseError: invalid byte sequence for encoding "UTF8": 0x91

我試過的是:我暫時用了decode('unicode_escape')。但是,這不能完成,因爲這只是刪除/逃避有關人物。

備用試用版:最初解碼,隨處可用Unicode,然後在需要時從數據庫進行編碼。由於手頭項目的擴張,這也無法完成。

請給我建議一些方法/程序/內置函數來完成任務。

+0

不知道這是否回答你的問題。但你可能會發現[這個相關的答案](http://stackoverflow.com/q/964825/146792)的一些用途。 – mac

+0

嘿,thanx mac爲你的努力。我讀了,並試圖使用編碼('utf-8'),但出現以下錯誤:'UnicodeDecodeError:'ascii'編解碼器無法解碼位置33中的字節0x92:序號不在範圍內(128)' –

回答

1

找出源文檔的真實編碼。它可能是WIN1251。可以對其進行轉碼(例如使用iconv)或相應地設置PostgreSQL的client_encoding

如果你沒有在pyodbc(我不知道)的設置,可以隨時發出一個普通的SQL命令:

SET CLIENT_ENCODING TO 'WIN1251'; 

更多手冊中的一章"Automatic Character Set Conversion Between Server and Client"英寸

+0

嘿,Erwin 。我們可以將已創建的數據庫的編碼更改爲所需的/所述編碼嗎? –

+0

@SandipAgarwal:不可以。可以在具有不同編碼的相同數據庫集羣中創建新數據庫(基於template0),但編碼必須與您的區域設置兼容,這樣可以縮小它的範圍。 [這是在SO上的相關帖子](http://stackoverflow.com/questions/5956163/postgres-databases-with-different-encoding)我不相信這是解決您的問題的好主意。 –