今天遇到了一个奇怪的情况,看到了一段代码类似下面所示:
with open("file.wav", "rb") as handle:
c = handle.read()
p = str(c)
从我们python对字符串的区分上讲,python3把字符串分为unicode和byte带具体编码的字符串。对于unicode其通过确定的4个字节代表字符,所以任何二进制的数据均可用unicode表示,而对于具体编码,特别是变长的编码,其必然存在一些字符空间是没有使用而用于区分变长的边界。如果是定长的编码格式则可能在将整个字符空间都涵盖到(但str不可能会使用一些定长的编码,如base64),因此为什么能够将随意的byte转化str,不会出现某些byte对应不到编码的范围吗?
实验: 通过hexedit编辑一个字符串

观察执行str后的效果,其实这个str并不是转编码,而是将byte转化成对应字符串表示

