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+mysql实现简单的web程序
Sep 11 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
利用Python实现图书超期提醒
Aug 02 Python
浅析Python数据处理
May 02 Python
python实现高斯(Gauss)迭代法的例子
Nov 20 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
pytorch 实现查看网络中的参数
Jan 06 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
Python 实现简单的客户端认证
Jul 29 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
May 07 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 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+SqlServer实现分页显示
2006/10/09 PHP
PHP之生成GIF动画的实现方法
2013/06/07 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
JavaScript 加号(+)运算符号
2009/12/06 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python生成IP段的方法
2015/07/07 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
python实现dijkstra最短路由算法
2019/01/17 Python
python的移位操作实现详解
2019/08/21 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
Python是怎样处理json模块的
2020/07/16 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
DBA的职责都有哪些
2012/05/16 面试题
上海某公司.net方向笔试题
2014/09/14 面试题
2013年高中生自我评价
2013/10/23 职场文书
竞聘书模板
2014/03/31 职场文书
入党后的感想
2015/08/10 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python
springboot中的pom文件 project报错问题
2022/01/18 Java/Android