问题一:
在shell脚本中调用Python脚本时可能无法正常输出的问题
在ubuntu系统的shell脚本中调用python脚本时一直阻塞无法继续执行,ctrl + c结束进程后报错如下
error: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
错误分析:
该错误时原因是由于系统的语言编码设置,导致无法显示中文。
- 解决方法1 可在运行脚本前,修改环境变量LANG或者PYTHONIOENCODING
export LANG="en_US.UTF-8"
或者
export PYTHONIOENCODING='utf-8'
- 解决方法2 也可在python脚本中修改标准输出编码方式
import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
拓展一: python的编码问题
在python2.7脚本默认编码是ascii码,该编码方式无法识别中文,因此一般会在脚本开头改变编码方式,如下:
#coding=utf-8
或者
## -*- coding: utf-8 -*-
将脚本的编码方式是改为utf-8,与python3一致。
-
在计算机内存中,统一使用unicode编码,当需要保存到硬盘或者需要传输时,转换成utf-8编码,以此来节省存储空间。
-
Unicode编码格式:\u0000
二进制编码格式(utf8, gbk):\x00\x00 -
在python2.7中存在字符串,一种是unicode类型的:如s = u’中文’,一种是str类型: 如s = ‘中文’。Unicode类型的字符串可由str类型解码得来decode(),Unicode类型的字符串也可编码成str类型encode()。
在python2.7中做编码转换时通常需要以Unicode类型字符串为中介即:
str.decode('原编码格式').encode('目标编码格式')
decode():得到Unicode类型的字符串,
encode():将Unicode类型的字符串转换成其他编码。
python3中一般不存在这种问题。