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


相关文章
|
存储 数据库
编码集的作用是什么?常见的编码集有什么?为什么常用utf-8?
编码集的作用是什么?常见的编码集有什么?为什么常用utf-8?
99 0
|
3月前
|
存储 自然语言处理 API
超级好用的C++实用库之字符编码转换
超级好用的C++实用库之字符编码转换
62 2
|
4月前
字符编码问题之GB2312编码设计来避免与ASCII字符编码冲突如何解决
字符编码问题之GB2312编码设计来避免与ASCII字符编码冲突如何解决
67 0
|
6月前
|
自然语言处理 Python
Python 中的编码与解码字符集与 Unicode 的详解
【6月更文挑战第10天】Python编程中,理解字符编码(如ASCII、UTF-8)和Unicode至关重要,它们关乎文本数据的正确处理。编码是字符转字节,解码则相反。UTF-8能表示几乎所有字符,适合多语言。Unicode为全球字符提供唯一编码。处理不同源文本时,需注意编码一致性,否则可能产生乱码。Python支持Unicode,但错误的编码解码操作可能导致问题。要确保程序处理文本的正确性,需选合适编码方案并保持编码一致性。
90 0
|
存储 Java 关系型数据库
【精炼易懂】字符集、编码、乱码问题、ASCII、GBK、Unicode、UTF-8详解+实例说明
【精炼易懂】字符集、编码、乱码问题、ASCII、GBK、Unicode、UTF-8详解+实例说明
6069 4
|
存储 Windows
编码 GBK 的不可映射字符 (0x80),sublime设置中文,sublime没有GBK编码选项的问题详解(二)
编码 GBK 的不可映射字符 (0x80),sublime设置中文,sublime没有GBK编码选项的问题详解
306 1
|
Java Linux 开发工具
编码 GBK 的不可映射字符 (0x80),sublime设置中文,sublime没有GBK编码选项的问题详解(一)
编码 GBK 的不可映射字符 (0x80),sublime设置中文,sublime没有GBK编码选项的问题详解
701 1
|
存储 Windows
“浅入深处“编码历史,字符串编码(ASCII, GBK, ANSI, Unicode, UTF-8编码),为什么记事本默认ANSI编码,Unicode和UTF8有什么区别
“浅入深处“编码历史,字符串编码(ASCII, GBK, ANSI, Unicode, UTF-8编码),为什么记事本默认ANSI编码,Unicode和UTF8有什么区别
148 0
|
Python
ASCII编码(Python扩展)
了解ASCII.和他的作用。
198 0
ASCII编码(Python扩展)
|
JavaScript
nodejs使用axios 读取gbk编码乱码转化
在通过axios读取页面的时候,经常会碰到gbk的编码,如果不进行转化的话,在获取信息或读取上都会很麻烦。
nodejs使用axios 读取gbk编码乱码转化