一直以来认为解决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 中文重定向失败的更多相关文章

  1. Python print输出重定向到文件和屏幕,超简单

    import sys import os class Logger(object): def __init__(self, filename="log.txt"): self.te ...

  2. python 处理中文文件时的编码问题,尤其是utf-8和gbk

    python代码文件的编码 py文件默认是ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时就会出错:SyntaxError: Non-ASCII character.需要在代码 ...

  3. python读取中文文件编码问题

    python 读取中文文件后,作为参数使用,经常会遇到乱码或者报错asii错误等. 我们需要对中文进行decode('gbk') 如我有一个data.txt文件有如下内容: 百度 谷歌 现在想读取文件 ...

  4. Python print报ascii编码异常的靠谱解决办法

    之前遇到此异常UnicodeEncodeError: 'ascii' codec can't encode characters...,都是用这种方式解决:sys.setdefaultencoding ...

  5. 【转】Python BeautifulSoup 中文乱码解决方法

    这篇文章主要介绍了Python BeautifulSoup中文乱码问题的2种解决方法,需要的朋友可以参考下 解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输 ...

  6. Python3.x在linux下print中文问题

    由于python3内部以Unicode实现,在默认非utf-8的Linux上print中文会报错UnicodeEncodeError. 由于系统默认非unicode,python3又以unicode实 ...

  7. python处理中文

    python 清洗中文文件 需要用到的两个链接: 1,unicode编码转换器 http://www.bangnishouji.com/tools/chtounicode.html 2,Python匹 ...

  8. python与中文的那点事

    目录 python与中文的那点事 1. utf-8/gbk/unicode/ASCII 2.各种编码之间的转换 3. 统计字符串中数字,字母,汉字的个数 python与中文的那点事 在学习python ...

  9. 【292】Python 关于中文字符串的操作

    参考:什么是字符编码? 参考:Unicode 和 UTF-8 有何区别? 参考:python中文decode和encode转码 一.相关说明 Python 中关于字符串的操作只限于英文字母,当进行中文 ...

随机推荐

  1. 题解-BJOI2019 光线

    Problem loj3093 & x谷 题意概要:给定 \(n\) 块玻璃,每块玻璃有其折射比例与反射比例(折射比例+反射比例 不一定为 \(100\%\)),求从最上头打下一束光,有多少比 ...

  2. Redis 和 I/O 多路复用

    最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 I/O 多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的 ...

  3. dijistra

    #include<bits/stdc++.h> using namespace std; ,maxm = ; int begin[maxn],to[maxm],next[maxm],v[m ...

  4. c++入门篇五

    默认参数: //默认参数//函数的默认参数,参数后面有'='//函数参数注意事项,如有一个位置有了默认参数//那么从该位置的后面就必须要有参数 , ) { //b有默认参数,b的后面也应该要有默认参数 ...

  5. scrapy发送邮件

    scrapy发送邮件 应用场景:在爬虫关闭或者爬虫空闲时可以通过发送邮件的提醒. 通过twisted的非阻塞IO实现,可以直接写在spider中,也可以写在中间件或者扩展中,看你具体的需求. 在网上找 ...

  6. STM32F0使用LL库实现DMA方式AD采集

    在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片.这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现.在本文中我们将介绍基于LL库的ADC的DM ...

  7. 处理soapUI特殊返回报文 【原】

    String message ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + & ...

  8. 关于父窗口获取跨域iframe子窗口中的元素

    这几天在项目中遇到,一个难点, 就是需要异步加载一个pdf插件, 同时又需要获取这个插件中的点击事件来生成用户的下载记录. 刚开始也是想了很多方法,网上搜的 格式1:$("#iframe的I ...

  9. OpenCV-Python:霍夫变换

    霍夫变换常用来在图像中提取直线和圆等几何形状.如下图: 我们下面来看看如何使用霍夫变换来检测直线.一条直线可以用数学表达式 y = mx + 或者 ρ = xcosθ + y sinθ表示(极坐标) ...

  10. TCP和UDP的区别以及使用python服务端客户端简单编程

    一.TCP.UDP区别总结 1.TCP面向连接(如打电话要先拨号建立连接):UDP是无连接的,即发送数据之前不需要建立连接 2.TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不丢失 ...