如何让Python StreamWriter要求Unicode输入?

2 投票
1 回答
1400 浏览
提问于 2025-04-17 04:12

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.encodingsys.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)

撰写回答