Python以Unicode(阿拉伯语)格式提取Oracle数据
我正在使用cx_Oracle从Oracle数据库中获取一些以阿拉伯语字符存储的数据。下面是我如何尝试连接到数据库的。当我试图打印结果时,特别是那些以阿拉伯语存储的列,我得到了类似“?????”的东西,在我看来,数据没有正确编码 我试着用Python打印随机的阿拉伯字符串,结果正常,这表明问题出在我从数据库中提取数据的方式上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
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当然想。请说吧