Python以Unicode(阿拉伯语)格式提取Oracle数据

Python以Unicode(阿拉伯语)格式提取Oracle数据,python,string,oracle,unicode,arabic,Python,String,Oracle,Unicode,Arabic,我正在使用cx_Oracle从Oracle数据库中获取一些以阿拉伯语字符存储的数据。下面是我如何尝试连接到数据库的。当我试图打印结果时,特别是那些以阿拉伯语存储的列,我得到了类似“?????”的东西,在我看来,数据没有正确编码 我试着用Python打印随机的阿拉伯字符串,结果正常,这表明问题出在我从数据库中提取数据的方式上 connection = cx_Oracle.connect(username, password, instanceName) wells = getWells(conne

我正在使用cx_Oracle从Oracle数据库中获取一些以阿拉伯语字符存储的数据。下面是我如何尝试连接到数据库的。当我试图打印结果时,特别是那些以阿拉伯语存储的列,我得到了类似“?????”的东西,在我看来,数据没有正确编码

我试着用Python打印随机的阿拉伯字符串,结果正常,这表明问题出在我从数据库中提取数据的方式上

connection = cx_Oracle.connect(username, password, instanceName)
wells = getWells(connection)

def getWells(conn):
    cursor = conn.cursor()
    wells = []
    cursor.execute(sql)
    clmns = len(cursor.description)
    for row in cursor.fetchall():
    print row
        well = {}
        for i in range(0, clmns):
            if type(row[i]) is not datetime.datetime:
                well[cursor.description[i][0]] = row[i]
            else:
                well[cursor.description[i][0]] = row[i].isoformat()
        wells.append(well)
    cursor.close()
    connection.close()
    return wells

为了从环境中强制重置默认编码,可以在sys模块中调用setdefaultencoding方法

由于不建议这样做,因此默认情况下它不可见,需要重新加载

建议您尝试为主机系统上的用户修复shell中的编码集,而不是在脚本中进行修改

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

保监处应该已经处理好了;您的操作系统环境默认语言是什么<代码>打印(os.environ['NLS_LANG'])应该会显示给您。例如,我的名字是
“english\u united kingdom.UTF8”
。谢谢@Ben,它确实解决了这个问题:)没问题,你想写一个通用的答案,向其他人解释你必须改变什么吗?@Ben当然想。请说吧