写在前面
- Python Web项目开发过程中遇到的重大Bug,项目已进行80%,Deadline最迟当天,,,
- 历史版本发布无异常,可能是安装前端软件导致编码等环境异常
- 尝试各种方法、几近抓狂近8小时
问题详情
- Flask Web项目,包含中文注释、查询Oracle数据库返回字段包含中文
- 无效尝试总结如下:
- 重启发布,无效
- 去掉代码中的所有中文,无效
- 设置环境变量LANG,无效
-
export LANG="en_US.UTF-8"
- 安装 supervisord
- 未有效解决问题
- 略去若干
- 解决办法
- python脚本添加如下代码:
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
问题原因
- 猜测可能是查询结果包含中文导致
- 在Oracle客户端向服务器端提交SQL语句时,Oracle客户端根据NLS_LANG和数据库字符集,对从应用程序接传送过来的字符串编码进行转换处理。
- 如果NLS_LANG与数据库字符集相同,不作转换,否则要转换成数据库字符集并传送到服务器。
- 服务器在接收到字符串编码之后,对于普通的CHAR或VARCHAR2类型,直接存储;
- 对于NCHAR或NVARCHAR2类型,服务器端将其转换为国家字符集再存储。
- 参考文章
- python 连接 Oracle 乱码问题(cx_Oracle).推荐
- UnicodeEncodeError: ‘ascii’ codec can’t encode character
- Python3中遇到UnicodeEncodeError: ‘ascii’ codec can’t encode characters in ordinal not in range(128)
- python 解决中文乱码问题(‘ascii’ codec can’t encode characters in )