近期在使用cx_oracle获取字符集为US7ASCII的数据库中的中文时乱码def getdata(lang):
os.environ['NLS_LANG'] = lang
userpwd = "ustest"
dsn =cx_Oracle.makedsn("192.168.159.130",1521,sid="ustest")
connection = cx_Oracle.connect("ustest",userpwd,dsn,encoding='US-ASCII',nencoding = "US-ASCII")
cursor = connection.cursor()
sql = """select name from students"""
cursor.execute(sql)
Datas=cursor.fetchall()
name=Datas[-1][0]
setp1 = name.encode('unicode_escape').decode('gb2312')
print('setp1%s'%setp1)
t = type(name)
print(Datas)
print(name ,t)
cursor.close()
connection.close()
if __name__ == "__main__":
getdata(lang='AMERICAN_AMERICA.US7ASCII')
如果按上面的代码执行时会报Datas=cursor.fetchall()UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)
如果将encoding='US-ASCII',nencoding = "US-ASCII"改为utf-8则中文乱码
setp1\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd
[('???',), ('??',), ('3F3F',), ('������',)]
������
改成gbk,ISO-8859-1也一样
这里的nls_lang也与服务器端设置的一致。求大佬帮忙