7

我正在使用一个包含很多汉字的数据库。我的代码是这样的:

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-oracle5.1.2 上。这里一定有我遗漏的东西。帮助表示赞赏!

4

3 回答 3

7

我遇到了同样的问题,我通过将环境变量设置为NLS_LANG来解决.AL32UTF8(这似乎是一种“通配符”,上面写着“对任何语言都使用 utf-8”)

于 2016-01-13T14:33:41.180 回答
1

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

import os
os.environ["NLS_LANG"] = ".GB18030"
于 2013-08-16T09:13:50.233 回答
0

用这个:

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

os.environ["NLS_LANG"]是Oracle的,所以使用Oracle的格式。我用我的 python 2.6.8 和 Oracle 11g 解决了这个问题。

于 2016-07-11T09:06:52.043 回答