如何让Python StreamWriter要求Unicode输入?
Python的codecs模块提供了StreamWriter类,用于自动处理输出流的编码。比如说:
outstream = codecs.getwriter('utf8')(sys.__stdout__)
outstream.write(u'\u2713')
outstream.write(' A-OK!\n') # I want this to fail!
outstream.close()
不过,我遇到的问题是,默认的StreamWriter会接受字符串(str)和Unicode对象。这就意味着,如果我的程序试图把一个字符串写入这个流,那就是个错误,我希望它能直接报错!有没有办法做到这一点,而不需要自己写一个StreamWriter来强制检查写入的对象类型呢?
另外,我希望我的解决方案不受这些因素的影响:sys.stdout.encoding
、sys.stdout.isatty()
、locale.getpreferredencoding()
、sys.getfilesystemencoding()
、os.environ["PYTHONIOENCODING"]
,或者Python其他任何聪明的处理方式。
1 个回答
3
如果可以的话,建议你在Python 3中进行你想做的事情,因为Python 3对unicode(字符)和bytes(字节)之间的区别处理得更清楚。如果不行的话,你需要创建一个新的类来继承StreamWriter
,比如这样:
import codecs
class StrictUTF8Writer(codecs.StreamWriter):
'''A StreamWriter for utf8 that requires written objects be unicode'''
encode = codecs.utf_8_encode
def write(self, object):
if not isinstance(object, unicode):
raise ValueError('write() requires unicode object')
return codecs.StreamWriter.write(self, object)