Mac下Python3 print中文报错 UnicodeEncodeError: 'ascii' codec can't encode character

最近学习DCGAN在跑程序遇到一个很诡异的问题。

程序在Win10上面跑都是正常的,但是通过SVN down到Mac上的时候却报错:

 'ascii' codec can't encode character '\u7b2c' in position 9: ordinal not in range(128)


咦~ 我才搭好的环境连python、tf什么的版本号都一样的,sublime里面的也改了contro+B是python3执行的,这还真是奇勒个怪

 
一开始以为是配置的的问题,疯狂改配置,百度了相关问题,几乎所有的解决方案都是:

在文件头部加入以下代码:

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

--------------------- ----------------------------------------------
可我寻思着这不是python2的解决方案吗,试了果然没用!

所有编码都改成了utf8,还是不行; 
而且提示是ascii,比较好奇这是哪里的编码…

系统编码
报错的字符是一个Unicode字符,查了下发现是python3,只有str和Unicode两种编码,去查了python3的系统编码:

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

系统编码就是utf8, 所以再去设置什么系统编码,文件开头加上‘# coding=utf8’ 对我的问题是没啥帮助;

输入输出编码
既然不是系统编码,而且前面输出都没有问题,所以可能也不是之前读写文件的编码错误,可能是print的时候,也就是标准输入输出的时候编码问题了;那么print的时候做了什么,用的是什么编码呢? 
我们已经知道在python3中,输出的时候,会把str/Unicode 变成utf8的编码;来看一下环境中的输出编码是什么:

>>> import sys 
>>> sys.stdout.encoding
'ANSI_X3.4-1968'
emmmm…..果然!!!居然是ansi…

解决方法
这样看来应该就是输入输出print的锅了,那么如何解决呢? 
也就是如何修改标准输出编码方式呢? 
有如下解决方法:、

  • 重新定义输出标准,在头部加上:
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())

参考:https://blog.csdn.net/u011415481/article/details/80794567 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值