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 tempfile模块学习笔记(临时文件)
May 25 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
python 字符串追加实例
Jul 20 Python
python统计指定目录内文件的代码行数
Sep 19 Python
python实现连续变量最优分箱详解--CART算法
Nov 22 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 Python
python如何实现单链表的反转
Feb 10 Python
Python restful框架接口开发实现
Apr 13 Python
如何使用python切换hosts文件
Apr 29 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
详解Python魔法方法之描述符类
May 26 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
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
js GridView 实现自动计算操作代码
2009/03/25 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python中函数总结之装饰器闭包详解
2016/06/12 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
python实现TCP文件传输
2020/03/20 Python
python使用列表的最佳方案
2020/08/12 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
linux面试题参考答案(9)
2015/01/07 面试题
行政部经理助理岗位职责
2014/06/15 职场文书
毕业生面试求职信
2014/06/23 职场文书
领导班子对照检查材料
2014/09/22 职场文书
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python