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实现的文件夹清理程序分享
Nov 22 Python
用Python编写脚本使IE实现代理上网的教程
Apr 23 Python
python实现红包裂变算法
Feb 16 Python
python fabric实现远程部署
Jan 05 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
Python入门学习指南分享
Apr 11 Python
简单了解python协程的相关知识
Aug 31 Python
PyTorch中permute的用法详解
Dec 30 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
PYTHON InceptionV3模型的复现详解
May 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 文件上传全攻略
2010/04/28 PHP
优化PHP程序的方法小结
2012/02/23 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
原创javascript小游戏实现代码
2010/08/19 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
解决option标签selected=&quot;selected&quot;属性失效的问题
2017/11/06 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
Python File(文件) 方法整理
2019/02/18 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
详解python和matlab的优势与区别
2019/06/28 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
python interpolate插值实例
2020/07/06 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
德国足球商店:OUTFITTER
2019/05/06 全球购物
医学院校毕业生自荐信范文
2014/01/01 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
关于分班的感言
2015/08/04 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
交通安全学习心得体会
2016/01/18 职场文书
nginx共享内存的机制详解
2022/03/21 Servers