【问题描述】
在使用Python读取Oracle中数据的时候,遇到了中文乱码的问题,简单举例如下:
import cx_Oracleimport pandas as pdconn = 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_Oracleimport pandas as pdimport 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代码,得到结果如下:
至此,乱码问题已解决~