使用Python处理一般字符串数据,我们可以很放心地使用字符串str数据类型,至于Python内部如何处理我们可以不用理会,这些事情Python的直译程序会处理。
但是有一天你要与外界沟通或交换数据时,特别是我们是使用中文,如果我们不懂中文字符串与bytes数据的转换,我们所获得的数据将会是乱码。例如:设计电子邮件的接收程序,所接收的可能是bytes数据,这时我们必须学会将bytes数据转成字符串,否则会产生乱码。或是有一天你要设计供中国人使用的网络聊天室,你必须设计将用户所传达的中文字符串转成bytes数据传上聊天室,然后也要设计将网络接收的bytes数据转成中文字符串,这个聊天室才可以顺畅使用。
bytes数据格式是在字符串前加上b,例如:下列是“魁”的bytes数据。
b'\xe9\xad\x81'
如果是英文字符串的bytes数据格式,会显示原始的字符,例如:下列是字符串“abc”的bytes数据。
b'abc'
当读者学会第6章列表、第8章元组时,笔者会在8-15-4节扩充讲解 bytes 数据与 bytearray 数据。
将字符串转成bytes数据称 编码 (encode),所使用的是 encode( ) ,这个方法的参数是指出编码的方法,可以参考下列表格。
如果字符串是英文转成bytes数据相对容易,因为对于utf-8格式编码,也是用一个byte存储每个字符串的字符。
实例1: 英文字符串数据转成bytes数据。
假设有一个字符串string,内容是‘ abc ’,我们可以使用下列方法设定,同时检查此字符串的长度。
下列是将字符串string用utf-8编码格式转成bytes数据,然后列出bytes数据的长度、数据类型和bytes数据的内容。
实例2: 中文字符串数据转成bytes数据。
假设有一个字符串name,内容是‘ 洪锦魁 ’,我们可以使用下列方法设定,同时检查此字符串的长度。
下列是将字符串name用utf-8编码格式转成bytes数据,然后列出bytes数据的长度、数据类型和bytes数据的内容。
由上述数据可以得到原来字符串用了3byte存储一个中文字,所以3个中文字获得的bytes数据长度是9。
对于一个专业的Python程序设计师而言,常常需要从网络取得数据,所取得的是bytes数据,这时我们需要将此数据转成字符串。将bytes数据转成字符串称 译码 ,所使用的是decode( ),这个方法的参数是指出编码的方法,与上一节的encode( )相同。下列实例是延续前一小节的bytes变量数据。
实例1: bytes数据转成字符串数据。
实例2: bytes数据转成字符串数据。
下列是将nameBytes数据使用utf-8编码格式转成字符串的方法,同时列出字符串长度和字符串内容。
读者须留意同样的中文字使用不同编码方式,会有不同码值,所以未来程序设计时看到乱码,应该就是编码问题。