参考Python的codecs模块 - 云+社区 - 腾讯云

codecs专门用作编码转换。

# -*- encoding: gb2312 -*-
import  codecs, sysprint   ' - ' * 60
#  创建gb2312编码器
look   =  codecs.lookup( " gb2312 " )
#  创建utf-8编码器
look2  =  codecs.lookup( " utf-8 " )a  =   " 我爱北京 " print  len(a), a
#  把a编码为内部的unicode, 但为什么方法名为decode呢,我 的理解是把gb2312的字符串解码为unicode
b  =  look.decode(a)
#  返回的b[0]是数据,b[1]是长度,这个时候的类型是unicode 了
print  b[ 1 ], b[0], type(b[0])
#  把内部编码的unicode转换为gb2312编码的字符 串,encode方法会返回一个字符串类型
b2  =  look.encode(b[0])
#  发现不一样的地方了吧?转换回来之后,字符串长度由14变为了7! 现在 的返回的长度才是真正的字数,原来的是字节数
print  b2[ 1 ], b2[0], type(b2[0])
#  虽然上面返回了字数,但并不意味着用len求b2[0]的长度就是7了, 仍然还是14,仅仅是codecs.encode会统计字数
print  len(b2[0])

上面的代码就是codecs的使用,是最常见的用法。另外还有一个问题就是,如果我们处理的文件里的字符编码是其他类型的呢?这个读取进行做处理也需要特 殊的处理的。codecs也提供了方法.

# -*- encoding: gb2312 -*- import  codecs, sys#  用codecs提供的open方法来指定打开的文件的语言编码,它会在读 取的时候自动转换为内部unicode bfile  =  codecs.open( " dddd.txt " ,  ' r ' ,  " big5 " )# bfile = open("dddd.txt", 'r') ss  =  bfile.read()bfile.close()#  输出,这个时候看到的就是转换后的结果。如果使用语言内建的open函数 来打开文件,这里看到的必定是乱码 print  ss, type(ss)

上面这个处理big5的,可以去找段big5编码的文件试试。

------------------------------------------------------------------------------------------------------------------------------------------------------

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

在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
(<built-in function utf_8_encode>, <function decode at 0x00AA25B0>, <class encodings.utf_8.StreamReader at 0x00AA0720>, <class encodings.utf_8.StreamWriter at 0x00AA06F0>)
>>> 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的双向服务。

Python的codecs模块相关推荐

  1. python :codecs模块简介

    python :codecs模块简介 python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理. 有一点需要清楚的是,当python ...

  2. 详解Python的codecs模块

    浅析Python的codecs模块 编码转化 codecs.open() 总结 Reference 编码转化 codecs专门用作编码转换. # -*- encoding: gb2312 -*- im ...

  3. python中codecs模块_python自然语言编码转换模块codecs介绍

    python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理. 有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码 ...

  4. python中codecs模块_python codecs模块解决UnicodeEncodeError

    通过python在html文件中截取table标签内容时,出现了UnicodeEncodeError: 'gbk' codec can't encode character u'\xc7' in po ...

  5. python使用codecs模块进行文件操作-读写中英文字符

    由于python中默认的编码是ascii,如果直接使用open方法得到文件对象然后进行文件的读写,都将无法使用包含中文字符(以及其他非ascii码字符),因此建议使用utf-8编码. 使用方法 读 下 ...

  6. python的codecs模块_Python:使用codecs模块进行文件操作及消除文件中的BOM

    前言 此前遇到过UTF8格式的文件有无BOM的导致的问题,最近在做自动化测试,读写配置文件时又遇到类似的问题,和此前一样,又是折腾了挺久之后,通过工具比较才知道原因. image 两次在一个问题上面栽 ...

  7. python中codecs_Python:如何使用codecs模块将unicode数据保存成gbk格式

    需求:使用codecs模块将utf-8的文件保存成gbk格式. 读取的时候,已经将编码设置成utf-8了.输出结果是unicode字符串. 但是在将unicode字符串写入文件并保存为gbk的时候,发 ...

  8. python的IO,以及codecs模块

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读文件 打开一个文件,读取后应该close(),为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... f ...

  9. python编码问题之encode、decode、codecs模块

    原文链接 #先说说编解码问题 编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码. Eg: ...

最新文章

  1. 6 款 Java 8 自带工具,轻松分析定位 JVM 问题!
  2. 计算机类专计算机网络基础与应用,2016年秋季学期计算机专业《计算机网络基础(专)》第一次语音答疑.ppt...
  3. oracle vm发现无效设置_Oracle数据库编译失效对象相关命令总结大全,值得收藏
  4. javascript中substring()、substr()、slice()的区别
  5. 通过QEMU-GuestAgent实现从外部注入写文件到KVM虚拟机内部
  6. JavaScript 之 JS重载
  7. 整理了 25 个前端相关的学习网站和一些靠谱的小工具,都来看看吧
  8. 前端---二级级联下拉列表的实现
  9. Android Mvc 实现
  10. db powerdesign 入门
  11. hydra暴力破解win10用户名和密码
  12. KETTLE将txt文本文件加载入库
  13. 简单几步解决 svchost 占用资源过高的问题
  14. 解决关于pycharm启动时持续Updating Indices的问题
  15. export default (imported as router) was not found_一篇文章搞定as四大用法
  16. 边境的悍匪—机器学习实战:第十五章 使用CNN和RNN处理序列
  17. flink(三):数据处理Transformation
  18. 方法教程:一分钟把网易云音乐上的MV/mv视频下载到本地电脑
  19. js动态向页面添加元素
  20. 将svg图片转换icon

热门文章

  1. mysql设置主从同步只读_MySql主从同步设置
  2. 【信用评分预测模型(四)】Python随机森林模型
  3. C语言 题目 1724: 后缀子串排序
  4. tplink连接服务器失败_TP-LINK无线路由器拨号失败,服务器无响应。该怎样设置?...
  5. 【观察】对话新华三张鹏:疫情防控“常态化”之下,城市治理现代化的趋势与思考...
  6. java接口传输数据太多怎么优化,【java】怎样优化接口返回大体量数据?
  7. 免费下载IEEE802系列标准
  8. 基于python的公众号课堂教学_基于Python的微信公众号数据挖掘分析
  9. DuerOS技能交互
  10. 桌面定时提醒ReRe_V0.8.2