python自然语言编码转换模块codecs介绍


Posted in Python onApril 08, 2015

python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理。

有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码,转换过程是这样的:

原有编码 -> 内部编码 -> 目的编码

python的内部是使用unicode来处理的,但是unicode的使用需要考虑的是它的编码格式有两种,一是UCS-2,它一共有65536个码位,另一种是UCS-4,它有2147483648g个码位。对于这两种格式,python都是支持的,这个是在编译时通过--enable-unicode=ucs2或--enable-unicode=ucs4来指定的。那么我们自己默认安装的python有的什么编码怎么来确定呢?有一个办法,就是通过sys.maxunicode的值来判断:
import sys

print sys.maxunicode

如果输出的值为65535,那么就是UCS-2,如果输出是1114111就是UCS-4编码。
我们要认识到一点:当一个字符串转换为内部编码后,它就不是str类型了!它是unicode类型:

a = "风卷残云"

print type(a)

b = a.unicode(a, "gb2312")

print type(b)

输出:
<type 'str'>

<type 'unicode'>

这个时候b可以方便的任意转换为其他编码,比如转换为utf-8:
c = b.encode("utf-8")

print c

c输出的东西看起来是乱码,那就对了,因为是utf-8的字符串。

好了,该说说codecs模块了,它和我上面说的概念是密切相关的。codecs专门用作编码转换,当然,其实通过它的接口是可以扩展到其他关于代码方面的转换的,这个东西这里不涉及。

#-*- encoding: gb2312 -*-

import codecs, sys
print '-'*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编码的文件试试。
Python 相关文章推荐
介绍Python中内置的itertools模块
Apr 29 Python
python非递归全排列实现方法
Apr 10 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
如何在python中使用selenium的示例
Dec 26 Python
python如何修改装饰器中参数
Mar 20 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
python 贪心算法的实现
Sep 18 Python
关于python中remove的一些坑小结
Jan 04 Python
Python实现聚类K-means算法详解
Jul 15 Python
python文件写入实例分析
Apr 08 #Python
python uuid模块使用实例
Apr 08 #Python
Python HTMLParser模块解析html获取url实例
Apr 08 #Python
python内存管理分析
Apr 08 #Python
Python中关于字符串对象的一些基础知识
Apr 08 #Python
Python MySQLdb模块连接操作mysql数据库实例
Apr 08 #Python
python单例模式实例分析
Apr 08 #Python
You might like
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
js DOM的学习笔记
2011/12/22 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
解析vue中的$mount
2017/12/21 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
python实现批量监控网站
2016/09/09 Python
python生成密码字典的方法
2018/07/06 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
pymysql的简单封装代码实例
2020/01/08 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
消防安全汇报材料
2014/02/08 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
董事长年会致辞
2015/07/29 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书