如何创建一个python StreamWriter REQUIRE unicode输入?

时间:2011-10-12 22:29:47

标签: python unicode codec

python编解码器模块提供了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对象之外。如果我的程序正在写一个str到这个流,这是一个错误,我希望它失败!有没有办法在不编写自己的StreamWriter的情况下实现这一点,该StreamWriter强制执行所写对象的类型?

另外,我不希望我的解决方案对sys.stdout.encodingsys.stdout.isatty()locale.getpreferredencoding()sys.getfilesystemencoding()os.environ["PYTHONIOENCODING"]或其他任何方式敏感。我试图变得聪明。

1 个答案:

答案 0 :(得分:3)

如果可能的话,做你在Python 3中尝试做的事情,它在unicode和字节之间有更强的区别。如果做不到这一点,您需要继承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)