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在命令行下使用google翻译(带语音)
Jan 16 Python
Python函数式编程指南(三):迭代器详解
Jun 24 Python
django接入新浪微博OAuth的方法
Jun 29 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
python读取LMDB中图像的方法
Jul 02 Python
将python图片转为二进制文本的实例
Jan 24 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
Django model update的多种用法介绍
Mar 28 Python
Python爬虫 bilibili视频弹幕提取过程详解
Jul 31 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
python实现web邮箱扫描的示例(附源码)
Mar 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
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
PHP 字符串操作入门教程
2006/12/06 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
php 使用array函数实现分页
2015/02/13 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
js实现文字滚动效果
2016/03/03 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
vue.js路由跳转详解
2017/08/28 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Pycharm更换python解释器的方法
2018/10/29 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
关于Keras Dense层整理
2020/05/21 Python
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
四年级下册教学反思
2014/02/01 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
新店开张活动方案
2014/08/24 职场文书
国防教育标语
2014/10/08 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
毕业生评语大全
2015/01/04 职场文书
民主评议党员个人总结
2015/02/13 职场文书
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js