codecs模块-完成字符编码

字符的编码是按照某种规则在单字节字符和多字节字符之间进行转换的某种方法。从单字节到多字节叫做decoding,从多字节到单字节叫做encoding。在这些规则中经常用到的无非是UTF-8和GB2312两种。

在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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逆向技术

16位汇编第六讲汇编指令详解第二讲

              16位汇编第六讲汇编指令详解第二讲 1.比较指令   CMP指令   1.CMP指令是将目的操作数减去源操作数,按照定义相应的设置状...

1705
来自专栏C语言及其他语言

[每日一题]C语言程序设计教程(第三版)课后习题6.5

题目描述 求以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和 输入 a b c 输出 1+2+...+a + 1^2+2^2+...+b^...

2735
来自专栏Android干货

Python高级特性:列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

433
来自专栏青玉伏案

窥探Swift之需要注意的基本运算符和高级运算符

  之前更新了一段时间有关Swift语言的博客,连续更新了有6、7篇的样子。期间间更新了一些iOS开发中SQLite、CollectionViewControl...

1825
来自专栏蘑菇先生的技术笔记

探索c#之尾递归编译器优化

2207
来自专栏拭心的安卓进阶之路

重温数据结构:哈希 哈希函数 哈希表

在学习 HashMap 前,我们先来温习下 Hash(哈希) 的概念。 什么是 Hash Hash(哈希),又称“散列”。 散列(hash)英文原意是“混杂”...

2105
来自专栏一“技”之长

Swift讲解专题十三——下标访问 原

        在以前的博客中,讨论过在Objective-C中,通过下标的方式访问自定义数据模型的方法。Objective-C中主要是通过实现一系列方法来使自...

553
来自专栏用户2442861的专栏

典型的Top K算法_找出一个数组里面前K个最大数...或找出1亿个浮点数中最大的10000个...一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入内存,

http://blog.163.com/xychenbaihu@yeah/blog/static/1322296552012821103039741/

542
来自专栏SeanCheney的专栏

《利用Python进行数据分析·第2版》 附录A NumPy高级应用A.1 ndarray对象的内部机理A.2 高级数组操作A.3 广播A.4 ufunc高级应用A.5 结构化和记录式数组A.6 更多

在这篇附录中,我会深入NumPy库的数组计算。这会包括ndarray更内部的细节,和更高级的数组操作和算法。 这章包括了一些杂乱的章节,不需要仔细研究。 A.1...

5106
来自专栏HTML5学堂

为什么不要在 JavaScript 中使用位操作符?

如果你的第一门编程语言不是 JavaScript,而是 C++ 或 Java,那么一开始你大概会看不惯 JavaScript 的数字类型。在 JavaScrip...

34610

扫码关注云+社区