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读取csv文件示例(python操作csv)
Mar 11 Python
使用Python的判断语句模拟三目运算
Apr 24 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
pandas数据处理基础之筛选指定行或者指定列的数据
May 03 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
Django中如何使用sass的方法步骤
Jul 09 Python
Python Django Cookie 简单用法解析
Aug 13 Python
简单分析python的类变量、实例变量
Aug 23 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 Python
python安装后的目录在哪里
Jun 21 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
Yii操作数据库的3种方法
2014/03/11 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
php的4种常用运行方式详解
2016/12/22 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
JavaScript版代码高亮
2006/06/26 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
Python中的元类编程入门指引
2015/04/15 Python
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
python 系统调用的实例详解
2017/07/11 Python
python的中异常处理机制
2018/08/30 Python
Python assert语句的简单使用示例
2019/07/28 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
大专应届生个人简历的自我评价
2013/10/15 职场文书
财务部经理岗位职责
2014/02/03 职场文书
公司合作协议书范本
2014/04/18 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
感恩教育观后感
2015/06/17 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
Spring实现内置监听器
2021/07/09 Java/Android
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL