2013-08-16 17 views
5

を含むデータベースを使用しています。私のコードは次のようなものになる:cx_Oracle/UnicodeDecodeErrorで漢字のエンコーディングを設定する

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 

をしかし、私はこのエラーを取得する:

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 

GBKが十分ではないようです。 私はGB18030GBKの代わりに符号化した結果をcx-oracleにしたいと思います。これはどうすればいいですか?

cx_Oracle.Connection.encodingは読み取り専用です... cx-oracleのドキュメントには、私がこれを行うことができることは何も見つかりませんでした。

I'm on Python 3.3.2 and cx-oracle 5.1.2。 ここに欠けているものがなければなりません。ヘルプは高く評価されています!

+0

Python 2または3を使用していますか? – Maciek

+0

私と同じシナリオ...ソリューションを見つけましたか? – daveoncode

答えて

0

あなたのプログラムの冒頭でNLS_LANG環境変数を設定してみてください:

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

これは私にこのエラーを与えています: 'cx_Oracle.DatabaseError:ORA-12705:NLSデータファイルにアクセスできません。私はPython 3.3.2を使っています。 – sorbet

4

私は同じ問題に直面していたと私は(それは「ワイルドカード」の一種だ.AL32UTF8に環境変数NLS_LANGを設定することで解決それは) "任意の言語にUTF-8を使用する" と言う

+0

は私のために働く。ありがとう! – neolei

0

使用この:[ "NLS_LANG"]はOracleのです

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

はos.environ .Oracleのフォーマットを使用してください。 私はこれをPython 2.6.8とOracle 11gで解決しました。

関連する問題