2013-08-16 13 views
5

Sto lavorando con un database contenente molti caratteri cinesi. Il mio codice più o meno così:Impostazione della codifica dei risultati della query in cx_Oracle/UnicodeDecodeError con caratteri cinesi

connection = cx_Oracle.connect("%s/%[email protected]%s:%s/%s" % (username, password, host, port, service_name)) 
cursor = connection.cursor() 
cursor.execute('SELECT HOTEL_ID,CREATE_TIME,SOURCE,CONTENT,TITLE,RATE,UPDATE_TIME FROM T_FX_COMMENTS') 

for row in cursor: 
    # Stuff goes here 
    pass 

ma ottengo questo errore:

Traceback (most recent call last): 
    File "test.py", line 17, in <module> 
    for row in cursor: 
UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 26: illegal multibyte sequence 

Sembra GBK non è sufficiente. Voglio rendere cx-oracle dammi i risultati codificati GB18030, anziché GBK. Come faccio a fare questo?

cx_Oracle.Connection.encoding è di sola lettura ... Non ho trovato nulla nella documentazione cx-oracle che suggerisce che posso farlo.

Sono su Python 3.3.2 e cx-oracle 5.1.2. Deve esserci qualcosa che mi manca qui. L'aiuto è apprezzato!

+0

Stai usando Python 2 o 3? – Maciek

+0

Stesso scenario per me ... hai trovato una soluzione? – daveoncode

risposta

0

Prova impostando la variabile di ambiente NLS_LANG all'inizio del vostro programma:

import os 
os.environ["NLS_LANG"] = ".GB18030" 
+0

Mi sta dando questo errore: 'cx_Oracle.DatabaseError: ORA-12705: Impossibile accedere ai file di dati NLS o all'ambiente non valido specificato'. A proposito, sono su Python 3.3.2. – sorbet

4

stavo affrontando lo stesso problema e ho risolto impostando la variabile d'ambiente NLS_LANG a .AL32UTF8 (sembra una sorta di "jolly" che dice "l'uso utf-8 per tutte le lingue")

+0

funziona per me. Grazie! – neolei

0

utilizzare questa:

import os 
os.environ["NLS_LANG"] = ".zhs16gbk" 

os.environ [ "NLS_LANG"] è per Oracle . Usa il formato di Oracle. Ho risolto questo problema con il mio Python 2.6.8 e Oracle 11g.

Problemi correlati