使用中文字符在cx_Oracle / UnicodeDecodeError中设置查询结果编码

时间:2013-08-16 06:12:59

标签: python encoding cx-oracle

我正在使用包含大量中文字符的数据库。我的代码是这样的:

connection = cx_Oracle.connect("%s/%s@%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还不够。 我想让cx-oracle给我GB18030编码结果,而不是GBK。我该怎么做?

cx_Oracle.Connection.encoding是只读的...我在cx-oracle文档中找不到任何暗示我可以执行此操作的内容。

我使用的是Python 3.3.2和cx-oracle 5.1.2。 我必须在这里找到一些东西。感谢帮助!

3 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,我通过将环境变量NLS_LANG设置为.AL32UTF8来解决(它似乎是一种&#34;通配符&#34;表示&#34;使用utf -8适用于任何语言&#34;)

答案 1 :(得分:1)

尝试在程序开头设置NLS_LANG环境变量:

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

答案 2 :(得分:0)

使用此:

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

os.environ [“NLS_LANG”]适用于Oracle.So使用Oracle的格式。 我用我的python 2.6.8和Oracle 11g解决了这个问题。