设为首页 收藏本站
查看: 707|回复: 0

[经验分享] [转载]使用codecs模块,在Python中完成字符编码

[复制链接]

尚未签到

发表于 2017-5-6 09:52:17 | 显示全部楼层 |阅读模式
  
字符的编码是按照某种规则在单字节字符和多字节字符之间进行转换的某种方法。从单字节到多字节叫做decoding,从多字节到单字节叫做encoding。在这些规则中经常用到的无非是UTF-8和GB2312两种。
 
在Python中,codecs模块提供了实现这些规则的方法,通过模块公开的方法我们能够方便地获取某种编码方式的Encoder和Decoder工厂函数(Factoryfunction),以及StreamReader、StreamWriter和StreamReaderWriter类。
 
使用“import codecs”导入codecs模块。
 
codecs模块中重要的函数之一是lookup,它只有一个参数encoding,指的是编码方式的名称,即utf-8或者gb2312等等。如下示例:
  >>>importcodecs
>>>t = codecs.lookup("utf-8")
>>>printt
(<built-infunction utf_8_encode>, <function decode at 0x00AA25B0>,<class encodings.utf_8.StreamReader at 0x00AA0720>, <classencodings.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")
>>>printfin.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的双向服务。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373656-1-1.html 上篇帖子: Python Tkinter写的个人所得税计算器(原创) 下篇帖子: python中对字符串的操作使用总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表