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 内置字符串处理函数的使用方法
Jun 11 Python
Python中pygame安装方法图文详解
Nov 11 Python
Python实现列表转换成字典数据结构的方法
Mar 11 Python
Python做文本按行去重的实现方法
Oct 19 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
Jun 26 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
Oct 31 Python
python 调用钉钉机器人的方法
Feb 20 Python
python aiohttp的使用详解
Jun 20 Python
浅谈pyqt5在QMainWindow中布局的问题
Jun 21 Python
Django实现简单网页弹出警告代码
Nov 15 Python
python读取ini配置的类封装代码实例
Jan 08 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下删除字符串中HTML标签的函数
2008/08/27 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
文本加密解密
2006/06/23 Javascript
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
微信小程序实现折叠面板
2018/01/31 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
python自动生成证件号的方法示例
2021/01/14 Python
adidas美国官网:adidas US
2016/09/21 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
ajax是什么及其工作原理
2012/02/08 面试题
行政文员岗位职责
2013/11/08 职场文书
班主任新年寄语
2014/04/04 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
感恩教师主题班会
2015/08/12 职场文书
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电