ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python3 错误UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal

2021-05-05 14:04:30  阅读:220  来源: 互联网

标签:ordinal 编码 utf 默认 json codec UnicodeEncodeError ascii Python3


问题

之前在使用Python2的时候,经常会遇到编码相关的错误,异常头疼。主要是因为Python2字符串设计上有一些固有的缺陷:

使用 ASCII 码作为默认编码方式,对中文处理很不友好。
把字符串的牵强地分为 unicode 和 str 两种类型,误导开发者

 

与Python2不同,Python3默认使用utf-8编码方式,并且Python3的字符主要由两种:str/byte。因此正常情况下,Python3很少出现编码问题,但是最近在使用docker的时候,又发生了两次编码错误问题,分别是因为:

1.docker环境(或当前命令行环境的默认编码不是utf-8)
2.处理的文件默认编码不是utf-8,而是ascii

解决方法
问题1

针对这两个可能的原因,首先判断系统的(或者当前命令行环境的)编码:

#首先进入python环境
import sys
sys.stdout.encoding
>>> 'US-ASCII'

这种情况下表示,当前的命令行的编码是ascii,所以需要手动改成utf-8:

export LANG="en_US.UTF-8"

如果是在ubuntu环境下,可以将上面这行命令加入~/.bashrc中一劳永逸解决问题,加入后运行下面命令使其生效或者重启生效。

source ~/.bashrc

或者另一种方法是,只针对python设定相应编码(同上,命令行运行或者加入bashrc文件):

PYTHONIOENCODING='utf_8'
export PYTHONIOENCODING

问题2

如果上面系统输出的已经是UTF-8,另一个可能的原因是读写的文件默认编码是ASCII。比如在使用json.dump()命令时,如果使用了其中的ensure_ascii=False关键字,而此时如果写入尝试写入非ascii的字符时就会报上面的错误,解决办法是提前指定操作文件的编码方法:

import json
import codecs # 比较方便处理各种非ascii编码的库
with codecs.open('your_file.txt',mode='w',encoding='utf-8') as fp:
json.dump(
json_str,
fp,
skipkeys=False,
indent=4, # 不使用该关键字时,所有字符写在同一行,省空间,但是文件较大时打开慢
ensure_ascii=False)

参考

https://blog.csdn.net/th_num/article/details/80685389
https://foofish.net/how-python3-handle-charset-encoding.html

原文链接:https://blog.csdn.net/songyu0120/article/details/88680562

标签:ordinal,编码,utf,默认,json,codec,UnicodeEncodeError,ascii,Python3
来源: https://www.cnblogs.com/Ph-one/p/14731553.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有