Codecs模块[通俗易懂]

Codecs模块这篇文章主要介绍了python自然语言编码转换模块codecs介绍,codecs专门用作编码转换,通过它的接口是可以扩展到其他关于代码方面的转换,需要的朋友可以参考下。常用说法:decode->unicode(内部编码格式)encode->其他编码格式解码(decode)成内部编码格式unicode,编码(encode)成其他格式。python对多国

大家好,又见面了,我是你们的朋友全栈君。

Codecs模块

这篇文章主要介绍了python自然语言编码转换模块codecs介绍,codecs专门用作编码转换,通过它的接口是可以扩展到其他关于代码方面的转换,需要的朋友可以参考下。

常用说法:

decode->unicode(内部编码格式)

encode->其他编码格式

解码(decode)成内部编码格式unicode,编码(encode)成其他格式。


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 = unicode(a, “gb2312”)
print type(b)

输出:

<type ‘str’>
< type ‘unicode’>

这个时候b可以方便的任意转换为其他编码,比如转换为utf-8:

c = b.encode(“utf-8”)
print c

好了,该说说codecs模块了,它和我上面说的概念是密切相关的。codecs专门用作编码转换,当然,其实通过它的接口是可以扩展到其他关于代码方面的转换的,这个东西这里不涉及。

# 创建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])

上面的代码就是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编码的文件试试。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128620.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • acwing-1142. 繁忙的都市[通俗易懂]

    acwing-1142. 繁忙的都市[通俗易懂]城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。城市C的道路是这样分布的:城市中有 n 个交叉路口,编号是 1∼n,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连接。这些道路是 双向 的,且把所有的交叉路口直接或间接的连接起来了。每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造。但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求:1.改造的那些道路能够把所有的交叉路口直接或间接的连通起来。2.在满足

    2022年8月9日
  • pytest运行_ios12清除缓存

    pytest运行_ios12清除缓存前言pytest运行完用例之后会生成一个.pytest_cache的缓存文件夹,用于记录用例的ids和上一次失败的用例。方便我们在运行用例的时候加上–lf和–ff参数,快速运行上一

    2022年7月31日
  • eclipse SVN插件_eclipse安装svn

    eclipse SVN插件_eclipse安装svn利用中文插件,我们可以更加直观的理解ecli

    2022年10月14日
  • web.xml配置contextConfigLocation[通俗易懂]

    web.xml配置contextConfigLocation[通俗易懂]web.xml中classpath:和classpath*:  有什么区别? classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. 有时候会用模糊匹配的方式配置多配置文件。但是如果配置文件是在jar包里,模糊匹配就找不到了。可以用逗号隔开的方式配置多个配置文件

    2022年7月14日
  • 轨迹规划——Bezier曲线与B样条曲线

    轨迹规划——Bezier曲线与B样条曲线一、Bezier曲线1、Bezier曲线的背景给定n+1个数据点,p0~pn,生成一条曲线,使得该曲线与这些点描述的形状相符。(如果要求曲线通过所有数据点,则属于插值问题;如果只要求曲线逼近这些数据点,则属于逼近问题。)2、Bezier曲线的定义p(t)=∑i=0naifi,n(t)p(t)=\sum_{i=0}^na_if_{i,n}(t)p(t)=i=0∑n​ai​fi,n…

    2022年6月20日
  • linux命令手册 apk_linux命令全集

    linux命令手册 apk_linux命令全集linux手册app是一款学习教育应用,是个能让你快速查询linux命令的手机软件。此外在linux手册app中还有学习手册,让你可随时查询不清楚的知识点。基本简介linux手册包app含linux命令速查以及一个linux简易学习教程,是学习linux必备宝典,命令速查可以快速知道linux命令使用方法,并且配有学习手册,方便及时查阅不懂知识。功能介绍1,linux简易教程方便随时阅读2,命令搜…

    2022年9月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号