【问题描述】
在使用Python读取Oracle中数据的时候,遇到了中文乱码的问题,简单举例如下:
import cx_Oracle
import pandas as pd
conn = cx_Oracle.connect("xzw", "xzw", "192.16.10.21:1521/xzw")
curs = conn.cursor()
sql = "SELECT * FROM xzw"
# 执行SQL语句
curs.execute(sql)
# 获取所有记录列表
results = curs.fetchall()
data = pd.DataFrame(results,columns=['id','name','pwd'])
print(data)
读取到的内容name字段为乱码。
【解决办法】
首先使用如下语句在plsql中查询Oracle的编码:
SELECT USERENV('language') FROM dual;
使用os库将Python编码设置为与Oracle中的编码一致:
import cx_Oracle
import pandas as pd
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.AL32UTF8'
conn = cx_Oracle.connect("xzw", "xzw", "192.16.10.21:1521/xzw")
curs = conn.cursor()
sql = "SELECT * FROM xzw"
# 执行SQL语句
curs.execute(sql)
# 获取所有记录列表
results = curs.fetchall()
data = pd.DataFrame(results,columns=['id','name','pwd'])
print(data)
运行Python代码,得到结果如下:
至此,乱码问题已解决~