python读写gbk、utf-8等输入输出流

2017-09-03  本文已影响0人  geofer

python编码问题:

所有使用python的都会遇到下面的问题:

Traceback (most recent call last):
  File "amazon_test.py", line 30, in 
    print(s)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)

解决方法

首先,你要有个通用的环境:

LANG=zh_CN.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

具体设置:

# ~/.bashrc中添加
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh:en_US:en
LC_ALL=en_US.UTF-8
set encoding=utf-8  " 新创建文件格式为utf-8
set termencoding=utf-8 " 终端显示格式,把解析的字符用utf-8编码来进行显示和渲染终端屏幕
set fileencodings=utf-8,gb18030,gbk,cp936,gb2312 " 可以查看多种格式的文件

python2

print >> sys.stdout, line.encode('gb18030', 'ignore') 
# 或者用,推荐下面的方法
sys.stdout.write(line.encode('gb18030', 'ignore') + '\n')

python3

import sys
sys.stdin.reconfigure(encoding='utf-8')
for line in sys.stdin:
         pass
上一篇 下一篇

猜你喜欢

热点阅读