PYTHON3 cx-Oracle 字符集 轉換錯誤的解決方案

babyyellow發表於2020-04-01

Python 3.x 裡面 預設的 字串是  unicode了.


cx-oracle    在支援到 py3.0 的時候,  遇到了字符集轉換問題. 


因為 gbk 編碼裡, 是很多時候, 是可以存一下半個漢子的字元.  


資料庫裡儲存了這些字元, 那麼在從資料庫到py 的轉換過程中就會出現  


字符集轉換錯誤: 


UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 14: illegal multibyte sequence 


很經典的錯誤. 


當排除了, 環境變數字符集,   資料庫連線池字符集後. 


還有其他方法可以用嗎? 


是的.  


oracle 的cx-oracle 已經給準備好了. 


cx-oracle.Connection   


跟 cx-oracle.cursor

類  增加了一個   回撥函式.   來處理這種異常. 



當然也可以 實現反人類的  . 突破預設 型別轉換的 駭客方法. 


  1.     oracle  從float  轉換為 python  的 decimal


          

OutputTypeHandleri1(cursor, , defaultType, size, , ):
    defaultType (cx_Oracle.STRING, cx_Oracle.FIXED_CHAR):
        cursor.var(binary, size, cur.arraysize, =OutConverter)
cursor.outputtypehandler = OutputTypeHandler
可以吧字串轉為 binary
2.  字符集轉換錯誤.  
def OutputTypeHandler(cursor, name, defaultType, size, precision, scale):
    if defaultType == cx_Oracle.STRING:
        return cursor.var(defaultType, size, arraysize=cursor.arraysize,
                          encodingErrors='surrogateescape')
                          
    connection.outputtypehandler = OutputTypeHandler
    
    或者  
    
    cursor. outputtypehandler = OutputTypeHandler
    
    
    
   3.  要求 . 
   
               要cx-oracle  6.4  以後版本.  
               
               
       之前的版本 , 基本無解了.






















來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-2683925/,如需轉載,請註明出處,否則將追究法律責任。

相關文章