python3.x的字符编码的转换

首先须要说的是python3的默认编码是Unicode,在pycharm中只是用utf-8去解释,实际的编码仍是Unicodepython

a = "某gbk编码格式"windows

a.decode("gbk").encode("utf-8")网络

#先用gbk方式解码成unicode,再转换成utf-8函数

python 3中最重要的新特性可能就是将文本(text)和二进制数据作了更清晰的区分。文本老是用unicode进行编码,以str类型表示;而二进制数据以bytes类型表示。
在python3中,不能以任何隐式方式将str和bytes类型两者混合使用。不能够将str和bytes类型进行拼接,不能在str中搜索bytes数据(反之亦然),也不能将str做为参数传入须要bytes类型参数的函数(反之亦然)。
字符串和字节符之间划分界线是必然的。上面这个图解要牢记于心:
strings能够被编码(encode)成字bytes,bytes也能够解码(decode)成strings:
 
1
2
3
4
>>> '€20'.encode('utf-8')
b'\xe2\x82\xac20'
>>> b'\xe2\x82\xac20'.decode('utf-8')
'€20'
 
能够这样理解:
string是文本(text)的抽象表示。字符串(string)由字符组成,字符也是抽象的实体且与任何二进制表示无关。
当操纵字符串的时候,不少细节是不用了解的。咱们能够分割、切片和拼接字符串,在字符串内部进行搜索。但并不在意内部是如何表示的,也不用在乎底层一个字符要花费多少byte。
只有在须要将string编码(encode)成byte的时候,好比:经过网络传输数据;或者须要将byte解码(decode)成string的时候,咱们才会关注string和byte的区别。
 
传入encode和decode的参数是编码方式。编码是一种用二进制数据表示抽象字符的方式。目前有不少种编码。上面给出的UTF-8是其中一种,下面是另外一种:
 
1
2
3
4
>>> '€20'.encode('iso-8859-15')
b'\xa420'
>>> b'\xa420'.decode('iso-8859-15')
'€20'
 
编码是这个转换过程当中相当重要的一部分。若不编码,bytes对象b'\xa420'只是一堆比特位而已。编码赋予其含义。采用不一样的编码,这堆比特位的含义就会大不一样:
 
1
2
>>> b'\xa420'.decode('windows-1255')
'₪20'
相关文章
相关标签/搜索