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文件操作整理汇总
Oct 21 Python
python 网络编程常用代码段
Aug 28 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
python实现手机通讯录搜索功能
Feb 22 Python
Python理解递归的方法总结
Jan 28 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
用python解压分析jar包实例
Jan 16 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
python的setattr函数实例用法
Dec 16 Python
pandas求平均数和中位数的方法实例
Aug 04 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
Yii2中Restful API原理实例分析
2016/07/25 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
php更新cookie内容的详细方法
2019/09/30 PHP
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
医药专业推荐信
2013/11/15 职场文书
学校元旦晚会方案
2014/02/19 职场文书
幼师求职自荐信
2014/05/31 职场文书
理财计划书
2014/08/14 职场文书
婚内分居协议书范文
2014/11/26 职场文书
团结友爱主题班会
2015/08/13 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
决心书格式及范文
2019/06/24 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python