区分 bytes str 和 unicode

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区分 bytes str 和 unicode相关的知识,希望对你有一定的参考价值。

参考技术A

Python3 有两种表示字符序列的类型: bytes 和 str 。其中 bytes 是一种包含原始8位值的序列; str 是一种包含 Unicode 字符的序列。
Python2 也有两种表示字符序列的类型: str 和 unicode 。其中 str 是一种包含原始8位值的序列; unicode 是一种包含 Unicode 字符的序列。

把 Unicode 字符转换成二进制数据(原始8位值)有多种办法,最常见的编码方式就是 UTF-8。Python3 的 str 实例或者 Python2 的 unicode 实例表示的 Unicode 字符要想转换成二进制数据,必须使用 encode 方法;要想把二进制数据转换成 Unicode 字符,则必须使用 decode 方法。

编码和解码操作我们通常会放在最外围来做,程序的核心部分应该使用 Unicode 字符类型,即 Python3 中的 str 和 Python2 中的 unicode ,并且不要对字符编码做任何假设。因此,在对输入的数据进行操作之前,我们通常会在应用中定义好辅助函数,以保证字符序列的类型符合以下预期:

下面,我们针对 Python2 和 Python3 ,分别编写 2 个辅助函数,以便在两种情况之间转换,确保转换后的输入数据符合预期的字符序列类型。

接受 str 或 bytes ,确保返回 str 的辅助函数:

运行结果:

接受 str 或 bytes ,确保返回 bytes 的辅助函数:

运行结果:

接受 str 或 unicode ,确保返回 unicode 的辅助函数:

Python2 中的 str 在程序中均以原始的 8 位值表示:

下面的写法,使用 format 函数连接 2 个字符序列,返回新的 str 是没问题的:

可若要返回 unicode 字符序列,则会报 UnicodeDecodeError :

这个时候我们就需要上述编写的 to_unicode 辅助函数,把 var2 转变为 unicode 序列:

接受 str 或 unicode ,确保返回 str 的辅助函数:

定义一个 unicode 字符序列:

使用 format 函数连接 2 个字符序列,返回 unicode 字符序列:

同理,返回 str ,则会报 UnicodeEncodeError :

我们需要借助上述编写的辅助函数 to_str 将 var3 转换为字节序列:

Python bytes与str

bytes与str概念

bytes是一种比特流,以0101这种形式存在,它是计算机能够读懂的格式,str是unicode的呈现形式。

Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。

str 与 bytes转换

name = '阿林'
print(name)
print(name.encode())  #执行结果:b'\\xe9\\x98\\xbf\\xe6\\x9e\\x97'


name_1 = b'\\xe9\\x98\\xbf\\xe6\\x9e\\x97'
print(name_1.decode())   #执行结果:阿林

以上是关于区分 bytes str 和 unicode的主要内容,如果未能解决你的问题,请参考以下文章

python bytes和str之间的转换

Python3中内置类型bytes和str用法及byte和string之间各种编码转换

小白的Python之路 day1 Python3的bytes/str之别

Python 3中的str和bytes类型

Python bytes与str

Python bytes与str