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中的break、continue、exit()、pass全面解析
Aug 05 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
python3实现多线程聊天室
Dec 12 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
python手写均值滤波
Feb 19 Python
Python使用configparser读取ini配置文件
May 25 Python
Python绘制动态水球图过程详解
Jun 03 Python
python 爬虫如何实现百度翻译
Nov 16 Python
Django扫码抽奖平台的配置过程详解
Jan 14 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中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
解放web程序员的输入验证
2006/10/06 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
微信jssdk踩坑之签名错误invalid signature
2020/05/19 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
python3使用smtplib实现发送邮件功能
2018/05/22 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python取余运算符知识点详解
2019/06/27 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
什么是URL
2015/12/13 面试题
幼儿园教师节活动方案
2014/02/02 职场文书
经典团队口号大全
2014/06/21 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
大明湖导游词
2015/02/03 职场文书
六一儿童节主持开场白
2015/05/28 职场文书