text = u'pi:π' locale.setlocale(locale.LC_ALL, '') #恢复系统默认 lang, encoding = locale.getdefaultlocale() #获取系统默认设置(或用户设置)过的lang、encoding print 'Locale lang: ', lang print 'Locale encoding: ', encoding sys.stdout = codecs.getwriter(encoding)(sys.stdout) #将输出管道的编码设置为刚刚获取到的默认encoding print 'Print with wrapped stdout: ', text ###设置输入管道编码### locale.setlocale(locale.LC_ALL, '') lang, encoding = locale.getdefaultlocale() sys.stdin = codecs.getreader(encoding)(sys.stdin) #注意这里是getreader() print 'From stdin:' print repr(sys.stdin.read())

3、文件、字符串写入读取编码转换设置

# -*- coding:utf-8 -*-
import sys
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')   
data = u'你好'
utf8 = data.encode('utf-8')
print utf8
with codecs.open('file1.txt', 'w', 'utf-8') as f:
	encoded_file = codecs.EncodedFile(f, data_encoding='utf-8', file_encoding='utf-8')
	encoded_file.write(utf8)
with codecs.open('file1.txt', 'r', 'utf-8') as f:
	encoded_file = codecs.EncodedFile(f, data_encoding='gbk', file_encoding='utf-8')
	print encoded_file.read()

  注意:codecs.EncodedFile(file, data_encoding, file_encoding=None, errors='strict') 

  该函数返回一个StreamRecoder对象,主要提供一个透明转换两种编码的机制。当数据将要写文件时,要先经过data_encoding进行解码,接着进行file_encoding编码,最后把数据写入到文件。当要从文件读取数据时,先经过file_encoding进行解码,接着进行data_encoding编码,最后把数据交给使用者。

  如果file_encoding不存在,默认是使用data_encoding来替换。

  errors是错误的处理方式,默认是strict处理方式,如果不能处理会抛出异常ValueError

可以发牢骚,但是必须要努力奋斗!