bytes的转换

无论是gbk/utf-8,它们都只是一种编码规则,一种把Unicode数据编码成字节数据的规则

内存中是Unicode编码的
open()编码方式默认是操作系统的

Python3.x,默认编码、编码方式均为 encoding=”utf-8

py2默认ASCII

内存中                            编码                    存到硬盘
字符串(Unicode)-----------encode----------->二进制bytes

硬盘                        解码                     读取到内存
二进制bytes---------decode-------------->字符串(Unicode)

1.在文本编辑器(如word/txt/Sublime text3/IDEL/各种解释器等等)编辑文字(中文/英文)时,计算机是
不认识这些的。在我们保存这份文件数据之前,数据是以Unicode形式存在内存中的。
2.保存了的存到磁盘上的数据 是通过某种编码方式(如utf-8/gbk等)进行编码(encode) 过的bytes字节串。
(在保存操作时编辑软件默默地作了编码工作,有它们默认保存文件的编码方式)
3.再次打开文件 时,软件又默默地(从磁盘)做了解码(decode)工作,即将数据从byte解码成Unicode(到内
存)。然后以明文呈现给用户。Unicode是离用户更近的数据,byte是离计算机更近的数据

Pyhon运行.py文件过程:打开文件,解码存磁盘的bytes数据成Unicode数据;接着,解释器将Unicode数据翻译
成C代码,再转成二进制的数据流;最后,通过控制操作系统调用CPU执行二进制数据,得出结果。整个过程结束。


# bytes转字符串方式一 b=b'xe9x80x86xe7x81xab' string=str(b,'utf-8') print(string) # bytes转字符串方式二 b=b'xe9x80x86xe7x81xab' string=b.decode() # 第一参数默认utf8,第二参数默认strict print(string) # bytes转字符串方式三 b=b'xe9x80x86xe7x81hahaxab' string=b.decode('utf-8','ignore') # 忽略非法字符,用strict会抛出异常 print(string) # bytes转字符串方式四 b=b'xe9x80x86xe7x81hahaxab' string=b.decode('utf-8','replace') # 用?取代非法字符 print(string) # 字符串转bytes方式一 str1='逆火' b=bytes(str1, encoding='utf-8') print(b) # 字符串转bytes方式二 b=str1.encode('utf-8') print(b)
原文地址:https://www.cnblogs.com/lishuaing/p/10554811.html