python包和库的区别,python库与模块
Python在编码转换时使用内部编码。转换过程如下。
本地代码-内部代码-目的地代码
Python使用unicode进行内部处理,但是使用unicode时需要考虑两种类型:UCS-2,65536码位和UCS-4中的2147483648g码位。
两种格式都支持python。这是在编译时通过-enable- unicode=ucs2或-enable-unicode=ucs4指定的。那么,我们默认安装的python上决定了什么样的编码呢?一种方法是根据sys.maxunicode的值来判断:
当输出值为65535时,Importsysprintsys.maxunicode为UCS-2,当输出值为1114111时,为UCS-4。
将字符串转换为内部编码后,请识别它不是str类型。这是一种unicode类型:
A=中文 printtype(a) b=a.unicode(a) a, GB 2312 print type)b)output:type str type unicode 此时b方便其他例子。
C=b.encode(utf-8))打印C输出的内容看起来像乱码,但实际上是。因为它是utf-8字符串。
让我们谈谈编解码器模块。这与上述概念密切相关。编解码器是专门用于编码转换的,但是当然,它实际上可以通过它的接口扩展到其他相关的代码转换。别碰这里。
-编码:GB 2312-导入编解码器,sysprint-* 60 #创建GB 2312编码器look=codecs.lookup(GB2312) #创建utf-8。我的理解是将gb2312的字符串解码成unicode=look.decode (a),返回的b[1]Type(Type返回的字符串类型B2=look . encode)b[0](b[0]encode方法)。你发现什么不同了吗?转换后,字符串的长度从14变成了7!的返回长度是实际的字符数。原来的字节数是print b2[ 1],b2[0],type(b2[0])。返回上面的字符数,但不代表len计算的b2[0]的长度是7,而只是14,codecs.encode会计算字符数。另一个问题是,如果我们处理的文件的字符编码是另一种类型,会发生什么?读取和处理这也需要特殊处理。编解码器还提供方法。
#-编码:GB 2312-导入编解码器,sys#使用编解码器提供的open方法来指定打开文件的语言编码。它会自动转换为内部Unicode BFILE=CODECS。OPEN (DDECS)) BIG5 (# BFILE=OPEN), dddd.txt), r) ss=此时你看到的就是转换后的结果。使用语言内置的open函数打开文件时,这里看到的一定是乱码printss。我们正在处理上述类型(ss)的big5。请尝试找到用big5段编码的文件。
字符编码是单字节字符和多字节字符之间按照一定的规则进行转换的一种方法。单字节转多字节叫编码,多字节转单字节叫编码。在这些规则中,不仅经常使用UTF-8和GB2312。
在Python中,编解码器模块提供了实现这些规则的方法。使用模块公开的方法,您可以轻松获得编码器和解码器工厂函数、StreamReader、StreamWriter和StreamReaderWriter。
使用导入代码来导入代码模块。
在编解码器模块中,一个重要的功能是查找,它只有一个参数编码,如utf-8或gb2312编码名称。下面的例子:
import codecst=codecs . lookup( utf-8
)print t(内置函数utf_8_encode,函数解码在0x00AA25B0,类encodings.utf_8。StreamReader at0x00AA0720,class encodings . utf _ 8 . streamwriter at0x 00aa 06 f 0)encoder=t [0]decoder=t [1]StreamReader=t [2]StreamWriter=t [3]lookup函数返回一个包含四个元素的元组,其中t[0]是编码器的函数引用,t[1]是解码器的函数引用,t[2]是UTF-8编码中StreamReader类对象的引用,t[3]是UTF-8编码中StreamWriter类对象的引用。相信熟悉Python的人都知道接下来怎么用。
编解码器模块还提供了一个独立的功能,方便程序员使用,以简化查找调用。它们是:
Get encoder(编码)get decoder(编码)get reader(编码)get writer(编码)如果我们只想得到一个utf-8编码的编码器方法,那么我们只需要这样做:
encoder=codecs . get encoder( UTF-8 )另外,为了StreamReader和StreamWriter的简化,codecs模块提供了一个开放的方法。与内置目标文件的打开方法相比,前者多了三个参数:编码、错误、缓冲。这三个参数是可选的,但是对于应用程序,需要显式指定编码的值,而错误和缓冲可以使用默认值。用法如下:
fin=codecs . open( e://my computer . txt , r , UTF-8) printfin.readline()这是我的电脑fin.close()。综上所述,编解码器模块为我们解决的字符编码处理提供了查找方法。它接受一个字符编码名的参数,并返回指定字符编码对应的编码器、解码器、StreamReader和StreamWriter的函数对象和类对象的引用。为了简化对lookup方法的调用,codecs还提供了getencoder(编码)、getdecoder(编码)、getreader(编码)和getwriter(编码)方法;此外,对特定字符编码的StreamReader、StreamWriter和StreamReaderWriter的访问得到了简化,编解码器直接提供了open方法。通过编码参数传递字符编码名,可以获得对编码器和解码器的双向服务。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。