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实现计算资源图标crc值的方法
Oct 05 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
python实现图片文件批量重命名
Mar 23 Python
python实现点对点聊天程序
Jul 28 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
jupyter notebook 的工作空间设置操作
Apr 20 Python
小结Python的反射机制
Sep 28 Python
Django实现随机图形验证码的示例
Oct 15 Python
python 自动化偷懒的四个实用操作
Apr 11 Python
python 安全地删除列表元素的方法
Mar 16 Python
python使用BeautifulSoup 解析HTML
Apr 24 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 win下Socket方式发邮件类
2009/08/21 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
python 获取当天每个准点时间戳的实例
2018/05/22 Python
Python常见的pandas用法demo示例
2019/03/16 Python
三个python爬虫项目实例代码
2019/12/28 Python
基于python实现matlab filter函数过程详解
2020/06/08 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
合同和协议有什么区别?
2014/10/08 职场文书
鲁迅故里导游词
2015/02/05 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
导游词之峨眉山
2019/12/16 职场文书
Windows7下FTP搭建图文教程
2022/08/05 Servers