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 CGI脚本的教程
Jun 29 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 Python
python爬虫入门教程--正则表达式完全指南(五)
May 25 Python
基于Python实现的微信好友数据分析
Feb 26 Python
python递归函数绘制分形树的方法
Jun 22 Python
Python subprocess库的使用详解
Oct 26 Python
python将视频转换为全字符视频
Apr 26 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
用Python生成HTML表格的方法示例
Mar 06 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 Python
浅谈Python中对象是如何被调用的
Apr 06 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生成静态页面详解
2006/12/05 PHP
关于时间计算的结总
2006/12/06 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
JS常用表单验证方法总结
2014/05/22 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
pyqt5实现登录界面的模板
2020/05/30 Python
python的range和linspace使用详解
2019/11/27 Python
Python try except else使用详解
2021/01/12 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
元宵节晚会主持人串词
2014/03/25 职场文书
元旦寄语大全
2014/04/10 职场文书
食品安全汇报材料
2014/08/18 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
2014年减负工作总结
2014/12/10 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL