0
点赞
收藏
分享

微信扫一扫

Flask python3 UnicodeEncodeError 'ascii' codec can't encode characters in position


写在前面

  • 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 )​​


举报

相关推荐

0 条评论