在Python中,codecs模块提供了实现这些规则的方法,通过模块公开的方法我们能够方便地获取某种编码方式的Encoder和 Decoder工厂函数(Factory function),以及StreamReader、StreamWriter和StreamReaderWriter类。
使用“import codecs”导入codecs模块。
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]
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方法,那么只需要这样做:
>>>
encoder = codecs.getencoder("utf-8"
)
另外,对于StreamReader和StreamWriter的简 化,codecs模块提供一个open方法。相对于built-in对象File的open方法,前者多了三个参数encoding, errors, buffering。这三个参数都是可选参数,但是对于应用来说,需要明确指定encoding的值,而errors和buffering使用默认值即 可。使用方法如下:
>>>
fin = codecs.open("e:\\mycomputer.txt"
, "r"
, "utf-8"
)
>>>
print
fin.readline()
这是我的电脑
>>>
fin.close()
总结一下,codecs模块为我们解决的字符编码的处理提供了lookup方法,它接受一个字符编码名称的参数,并返回指定字符编码对应的 encoder、decoder、StreamReader和StreamWriter的函数对象和类对象的引用。为了简化对lookup方法的调 用,codecs还提供了getencoder(encoding)、getdecoder(encoding)、 getreader(encoding)和getwriter(encoding)方法;进一步,简化对特定字符编码的StreamReader、 StreamWriter和StreamReaderWriter的访问,codecs更直接地提供了open方法,通过encoding参数传递字符编 码名称,即可获得对encoder和decoder的双向服务。