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内置数据类型详解
Aug 18 Python
跟老齐学Python之网站的结构
Oct 24 Python
Python中使用gzip模块压缩文件的简单教程
Apr 08 Python
Python中利用原始套接字进行网络编程的示例
May 04 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
Python下载指定页面上图片的方法
May 12 Python
深入浅出分析Python装饰器用法
Jul 28 Python
python实现图片上添加图片
Nov 26 Python
如何理解python对象
Jun 21 Python
python 代码运行时间获取方式详解
Sep 18 Python
Python 测试框架unittest和pytest的优劣
Sep 26 Python
python爬虫工具例举说明
Nov 30 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
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
JavaScript中的类继承
2010/11/25 Javascript
加速IE的Javascript document输出的方法
2010/12/02 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
js实现楼层导航功能
2017/02/23 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
在漏洞利用Python代码真的很爽
2007/08/26 Python
利用Psyco提升Python运行速度
2014/12/24 Python
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
python将文本转换成图片输出的方法
2015/04/28 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
工商管理系学生的自我评价分享
2013/11/29 职场文书
法学个人求职信范文
2014/01/27 职场文书
节约用水倡议书
2014/04/16 职场文书
艾滋病宣传标语
2014/06/25 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
导游词开场白
2015/01/31 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
培训感想范文
2015/08/07 职场文书
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle