码迷,mamicode.com
首页 > 编程语言 > 详细

python print 中文重定向失败

时间:2019-04-18 21:49:57      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:python实现   block   most   coding   one   字符集   开始   stat   first   

一直以来认为解决python字符集编码,不一定需要通过sys.setdefaultencoding。因为既然python实现过程中,默认禁用了该操作,说明是不推荐的。
通过不断的字符转换,也cover了一些问题。
但今天在把python输出的中文重定向到文件作为日志输出时,遇到了问题。
直接打屏没问题,但重定向到文件就会有问题。

日志

calculate for cc with result list offset 0 -> 255
Traceback (most recent call last):
  File "hive_stats_sql_operation.py", line 325, in <module>
    print job_report(_result_file = result_file, _pre_job_key = pre_job_key)
  File "hive_stats_sql_operation.py", line 286, in job_report
    print dict_format(reduce(lambda x,y : x + y, local_result_list), ensure_ascii=False)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 31-32: ordinal not in range(128)

问题复现与排查

#!/bin/env python
#coding:utf8
import sys
print sys.stdout.encoding
#first
python code.py
#UTF-8
#second 
python code.py > debug ; cat debug
# None

问题的解决

  • 问题的原因也知道了,那么解决方法也就很明了了,就是让字符串正确的decode就ok了,所以有如下几种方法:

    • 在代码的开始调用reload(sys);sys.setdefaultencoding(‘utf8’)通过这种方式,我们制定了默认的encode字符集为utf8因此修正了以上错误
    • 在print u1的地方改成print u1.decode(‘utf8’).encode(‘utf8’)由我们来指定调用的字符集防止其调用默认的ascii

python print 中文重定向失败

标签:python实现   block   most   coding   one   字符集   开始   stat   first   

原文地址:https://www.cnblogs.com/suanec/p/10732536.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!