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 条评论
登录 后参与评论

相关文章

来自专栏飞扬的花生

正则表达式的总结

      经常用到正则表达式,以前很懒总是让同事帮我写,最近有时间稍微复习了下正则表达式的基本语法,发现网络上的这类知识是琳琅满目,通过去糟粕取精华后总结了这...

2158
来自专栏LeetCode

LeetCode <dp>152&628 Maximum Product Subarray

Given an integer array nums, find the contiguous subarray within an array (conta...

1284
来自专栏云瓣

JS中遍历语法的比较

for循环 JavaScript 提供多种遍历语法。最原始的写法就是for循环。 let arr = [1,2,3,4,5]; for (var index ...

3614
来自专栏技术博客

C#字符串(字节)的长度

顺便看一下Sql Server中char nchar varchar  nvarchar

2952
来自专栏java学习

Java基础第三天学习笔记

03.01_Java语言基础(逻辑运算符的基本用法)(掌握) * A:逻辑运算符有哪些 * &,|,^,! * &&,|| * B:案例演示 * 逻辑运算...

2817
来自专栏CodingToDie

Python学习(五):函数

第5 章 函数 Table of Contents 函数调用 数据类型转换 定义函数 空函数 返回多个值 tuple 函数调用 Python内置了很多有用的函数...

4375
来自专栏Java编程

Java抽象类与接口的区别

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。

1K11
来自专栏Android干货园

Kotlin初级(4)- - - 字符串和字符.md

902
来自专栏日常学python

Python最容易掉进去的10个坑

相比于其他语言,Python的语法比较简单易学,但一旦不注意细节,刚入门的新手很容易就会掉进语法错误的坑里。

663
来自专栏康怀帅的专栏

PHP 数组相关函数

本文列举了 PHP 数组相关函数。 数组长度 int count(mixed $var [, int $mode = COUNT_NORMAL]); 此函数也可...

3034

扫码关注云+社区