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中的map()函数和reduce()函数的用法
Apr 27 Python
实例Python处理XML文件的方法
Aug 31 Python
Python中functools模块函数解析
Mar 12 Python
python让列表倒序输出的实例
Jun 25 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
使用python爬取抖音视频列表信息
Jul 15 Python
python 二维矩阵转三维矩阵示例
Nov 30 Python
Django REST framwork的权限验证实例
Apr 02 Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 Python
django为Form生成的label标签添加class方式
May 20 Python
Python pymsql模块的使用
Sep 07 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 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读取PDF内容配合Xpdf的使用
2012/11/24 PHP
php牛逼的面试题分享
2013/01/18 PHP
利用PHP实现短域名互转
2013/07/05 PHP
PHP反向代理类代码
2014/08/15 PHP
php实现插入排序
2015/03/29 PHP
农历与西历对照
2006/09/06 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
微信小程序实现签字功能
2019/12/23 Javascript
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
Python open读写文件实现脚本
2008/09/06 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
Python中DJANGO简单测试实例
2015/05/11 Python
python类的继承实例详解
2017/03/30 Python
Python学习思维导图(必看篇)
2017/06/26 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
python 实现dict转json并保存文件
2019/12/05 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
求职简历自荐信范文
2013/10/21 职场文书
如何掌握自荐信格式呢
2013/11/19 职场文书
生产班组长岗位职责
2014/01/05 职场文书
文体活动总结范文
2014/05/05 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
会计求职信怎么写
2015/03/20 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书