python unicode类型,python3 unicode编码转换中文
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是把其他代码编码的字符串转换成unicode代码,比如str1.decode(gb2312 ),意思是把gb2312编码的字符串转换成unicode代码。
encode的作用是将unicode编码转换成其他编码字符串,比如str2.encode(gb2312 ),意思是将unicode编码字符串str2转换成gb2312编码。
所以在转码的时候,首先要了解字符串str是什么编码,然后解码成unicode,再编码成其他编码。
中代码字符串的默认编码与代码文件本身的编码一致。
例如s=中文
如果在utf8文件中,字符串是utf8代码,如果在gb2312文件中,其代码是gb2312。
在这种情况下,为了执行编码转换,需要首先使用decode方法将其转换为unicode编码,然后使用encode方法将其转换为其他编码。通常,当没有指定具体的编码方法时,使用系统的默认编码来创建代码文件。
如果字符串是这样定义的:s=u 中文
字符串的编码被指定为unicode,即python的内部编码,与代码文件本身的编码无关。因此,在这种情况下,我们只需要直接使用encode方法将其转换为指定的代码。
如果一个字符串已经是unicode了,再解码就错了,所以通常需要判断它的编码方式是不是unicode:
Isinstance(s,unicode)#) #用于确定是否为unicode。
以非编码编码的形式用str编码会报错。
如何获取系统的默认代码?
#!/usr/危机之花卷/env python
#编码=utf-8
导入系统
printsys.getdefaultencoding()
这个程序在英文WindowsXP上的输出是ascii。
在某些IDE中,字符串的输出总是出现乱码甚至错误,这其实是由于IDE本身的结果输出控制台无法显示字符串的编码,而不是程序本身的问题。
例如,在UliPad中运行以下代码:
S=u 中文
打印s
是:unicode编码器错误:“ascii”编解码器无法对位置0-1中的字符进行编码:序号不在范围内(128)。这是因为英文WindowsXP上的UliPad的控制台信息输出窗口是按照ascii编码输出的(英文系统默认编码是ascii),而上面代码中的字符串是Unicode编码,所以输出有错误。
将最后一句改为:打印s.encode(gb2312 )
可以正确输出单词“中文”。
如果最后一句改为:打印s.encode(utf8 )
output:\ xe4 \ xb8 \ xad \ xe6 \ x96 \ x87,是控制台信息输出窗口根据ascii编码输出utf8编码字符串的结果。
Unicode(str, gb2312 )与str.decode(gb2312 )相同,它将gb2312编码的str转换为Unicode。
使用str。__class__查看str的编码形式。
Python是一种容易出现编码问题的语言。于是,我按照我的理解写了下面的话。
=首先要知道几个概念。=
*字节:计算机数据的表示。8位二进制。可以表示无符号整数:0-255。在下文中,“字节流”用于表示由“字节”组成的字符串。
*字符:英文字符“abc”,或中文字符“你、我、他”。人物本身不知道怎么保存在电脑里。在下文中,将避免使用“字符串”一词,而是使用“文本”。
显示一串“字符”。
*编码(动词):按照一定的规则(这个规则叫做:编码(名词)),“文本”转换成“字节流”。(在python中:unicode变成了str)
*解码(动词):按照一定的规则将“字节流”转换成“文本”。(在python中:str变成unicode)
* *实际上,计算机中表示的任何东西都需要编码。比如视频要编码然后保存在文件里,播放的时候需要解码才能观看。
Unicode:unicode定义了一个“字符”和一个“数字”之间的对应关系,但它没有指定这个“数字”是如何存储在计算机中的。(就像在C语言中一样,整数既是
它可以是int或short。Unicode没有指定是使用int还是short来表示“字符”)
Utf8:unicode实现。它使用unicode定义的“字符”和“数字”映射,然后指定如何在计算机中保存这个数字。其他utf16等。
Unicode实现。
Gbk:类似utf8的“代码”。但是,它不使用unicode定义的“字符”和“数字”映射,而是使用另一组映射方法。此外,它还定义了如何使用
保存在电脑里。
=python=中的编码、解码方法
首先要知道编码是unicode转换成str。Decode是str到unicode的转换。
在下面,u表示unicode类型的变量,s表示str类型的变量。
U.encode( . ))基本上总是成功的,只要你填写正确的代码。就像任何文件都可以压缩成zip文件一样。
S.decode( . )经常出错,因为“代码”str是什么要看上下文。在解码高花卷的时候,需要确定S是用什么编码的。比如,打开压缩文本。
确保它确实是一个zip文件,而不仅仅是一个带有伪造扩展名的zip文件。
不推荐U.decode(),s.encode(),s.encode相当于s.decode()。默认情况下,encode()首先被编码(通常
Ascii)在编码中转换为unicode。
=关于#编码=utf8=
高大的花卷轴在py文件的第一行。如果把这句话写出来,按照这个代码保存文本,那么这句话就有如下作用。
1.让词法分析器正常工作,不要在评论里报错中文。
2.对于U Chinese 来说,literal string可以知道两个引号中的内容是utf8编码的,然后就可以正确的转换成unicode。
3.中文对于这样的文字字符串,你会知道中间的内容是utf8代码,然后可以正确的转换成其他代码或者unicode。
我还没写完,先码这么多字,以后再补充。这不是维基,太麻烦了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。