现象

打印任何一种包含有中文的对象,字典、列表、DataFrame、或字符串。比如:

print('中文')

控制台报错:

Traceback (most recent call last):File "printcn.py", line 1, in <module>print('\u4e2d\u6587')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

换另外一台机器可以正常显示 中文 。或者在PyCharm里执行也可以正常显示。只有在命令行控制台会报错。

我的环境是MacOS 10.13.3 中文,Anaconda3 5.0.1

Python 3.6.3 |Anaconda custom (64-bit)| (default, Oct  6 2017, 12:04:38)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

查找原因

如果是python 2.X的话需要在文件中加上 # -*- coding: utf-8 -*- 、以及 reload(sys) sys.setdefaultencoding("utf8") 。但是Python3应当默认就使用utf8编码,而且即使设置了这些也仍然不能正常打印。

有些人说用encode('utf-8')函数解决,但如果直接打印字典或DataFrame,总不能每个元素都encode一般吧。

最终查看了一下系统环境编码

>>> import sys
>>> sys.stdout.encoding
'US-ASCII'

而另一台能正常打印的机器是 en_US.UTF-8

解决办法

(1)设置环境变量LANG

在linux或Mac上设置环境变量的方式一样,编辑~/.bash_profile文件('~'指的是用户登录后的默认目录),添加一行:

export LANG="en_US.UTF-8"

保存退出后重新打开命令行控制台

(2)使用PYTHONIOENCODING

在运行python命令前添加参数 PYTHONIOENCODING=utf-8 python printcn.py

该参数的解释可查看官方文档:https://docs.python.org/3.6/using/cmdline.html#envvar-PYTHONIOENCODING

(3)重新定义标准输出

在代码中添加 sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) ,使代码变为:

import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
print('中文')

转载于:https://www.cnblogs.com/qhlblog/p/8622109.html

Python3中遇到UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal not in range(128)...相关推荐

  1. Python3中遇到UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in ordinal not in range(128)

    原文链接:https://blog.csdn.net/th_num/article/details/80685389 Python3中遇到UnicodeEncodeError: 'ascii' cod ...

  2. macOS解决sublime text3运行python3报:UnicodeEncodeError: 'ascii' codec can't encode characters in position

    在macOS中,使用sublime text3运行python3代码,打印语句中含有中文字符时报错, 解决方法如下: 修改Sublime Text3中的设置,Preferences > Brow ...

  3. python3报错处理:UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-1

    一.背景说明 最开始不愿意使用Python,一大原因是因为Python2默认使用ASCII编码处理中文可以说是一件痛苦的事情.仅从更换默认编码一项变换,就可以说Python3和Python2不算同一门 ...

  4. (转)python3 urllib.request.urlopen() 错误UnicodeEncodeError: 'ascii' codec can't encode characters...

    代码内容: url = 'https://movie.douban.com/j/search_subjects?type=movie'+ str(tag) + '&sort=recommend ...

  5. [转]Python UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 的解决办法...

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 的解决办法 python在安装时,默认的编码是ascii,当 ...

  6. UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    在linux centos系统中使用python2.7.2对一个字符串解码然后输出,代码如下: s = "哈哈哈" print s.decode('utf-8') 结果报了如下的错 ...

  7. 解决UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 问题(转)

    解决UnicodeEncodeError: 'ascii' codec can't encode characters in position 问题(转) 参考文章: (1)解决UnicodeEnco ...

  8. 已解决UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 18-20: ordinal not in range

    已解决UnicodeEncodeError: 'ascii' codec can't encode characters in position 18-20: ordinal not in range ...

  9. 已解决 UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 26-29: ordinal not in r...

    背景 打算使用 pygrib 打开读取 grib2 文件: msgs = pygrib.open(r"D:\下载目录\20230706000000-0h-enfo-ef.grib2" ...

最新文章

  1. nojy 105 九的余数
  2. 基于ESP32的智能车竞赛新版裁判系统的软件功能要求与实现
  3. Alfred+AppleScript实现快速复制当前文件夹路径
  4. 16、用VS2005调试编译驱动程序
  5. 牛客题霸 NC26 括号生成
  6. JAVA之获取JavaSwing复选框JCheckBox选中的值(内容)
  7. google us web
  8. [SEO]让你的Asp.Net网站自动生成Sitemap——XmlSitemap
  9. [Android]发布Sqlite数据库
  10. 覆盖所有面试知识点,赶紧收藏!
  11. 前端学习(3229):React中的事件处理
  12. mysql+cls()_MySQL性能优化之show processlist(一)
  13. Redis配置和持久性
  14. NetBeans Support Weblog
  15. 克就克嘛!哪个怕哪个
  16. Linux 内存管理之 SLUB分配器(6):slub debug 实例测试
  17. devexpress ajax demo,DevExpress Demo示例展示:多功能站点插件 附在线演示
  18. c/c++利用ghostscript API打印机pdf文件
  19. 机器学习基础篇-逻辑回归和多分类问题
  20. python byte什么意思_python bytes是什么

热门文章

  1. android xml 设置图片,android 的几种图片效果xml写法
  2. linux下如何为redis配置path,linux环境下如何启动redis
  3. php文件上传漏洞防御,第十二课 php文件上传漏洞和代码防御
  4. java读取excel数据的方法是_java怎么读取excel文件里的数据
  5. 计算机中丢失msc,mscvr120.dll32位/64位版_修复计算机中丢失msvcr120.dll
  6. 管理节点连接不上sql节点_质量成本管理:成本控制、成本分析、费用使用流程与节点说明...
  7. 全连接层的作用_python构建计算图2——全连接层
  8. python设置函数_在Python中设置函数签名
  9. 一张纸厚度是多少毫米_一张纸的威力有多大?纸折103次捅破宇宙,理论荒诞却无法反驳...
  10. STL中“大”、“小”和“相等”的概念