在Python中,codecs模块提供了实现这些规则的方法,通过模块公开的方法我们能够方便地获取某种编码方式的Encoder和 Decoder工厂函数(Factory function),以及StreamReader、StreamWriter和StreamReaderWriter类。
lookup函数返回一个包含四个元素的TUPLE,其中t[0]是encoder的函数引用,t[1]是decoder的函数引用,t[2] 是UTF-8编码方式的StreamReader类对象引用,t[3]是UTF-8编码方式的StreamWriter类对象引用相信对Python熟悉的你肯定知道接下来该怎么用它们了。
codecs模块还提供了方便程序员使用的单独函数,以简化对lookup的调用。它们是:
- getencoder(encoding)
- getdecoder(encoding)
- getreader(encoding)
- getwriter(encoding)
如果我们只是想获取一种utf-8编码的encoder方法,那么只需要这样做:
另外,对于StreamReader和StreamWriter的简化, codecs模块提供一个open方法。相对于built-in对象File的open方法,前者多了三个参数encoding, errors, buffering。这三个参数都是可选参数,但是对于应用来说,需要明确指定encoding的值,而errors和buffering使用默认值即可。
codecs模块中重要的函数之一是lookup,它只有一个参数encoding,指的是编码方式的名称,即utf-8或者gb2312等等。如下示例:
import codecs t = codecs.lookup('utf-8') print(t) encoder = t[0] decoder = t[1] StreamReader = t[2] StreamWriter = t[3] print(encoder, decoder, StreamReader, StreamWriter) with codecs.open('demo.txt', 'r', encoding='utf-8') as f: print(f.read())
输出:
<codecs.CodecInfo object for encoding utf-8 at 0x1da55dcc3a8> <built-in function utf_8_encode> <function decode at 0x000001DA55DDAF28> <class 'encodings.utf_8.StreamReader'> <class 'encodings.utf_8.StreamWriter'> 测试下codecs [Finished in 0.2s]
https://blog.csdn.net/hmsiwtv/article/details/20400455