1
Sylv 2017-02-25 02:28:02 +08:00 via iPhone 1
Python 3 的 str 对应 Python 2 的 unicode ,本身可以说是没有编码,存储的是 Unicode 的码点。
Python 3 的 bytes 对应 Python 2 的 str ,是字节流,相同文字用不同编码生成的字节流是不一样的。 |
2
AvenirX 2017-02-25 05:40:59 +08:00 4
@Sylv 对的。补充一下: Python3 的 bytes 是 Python2 中 str 的子集。 参考 Text versus binary data 章节 https://docs.python.org/3/howto/pyporting.html
@woniu127 先理解 Text 和 Binary data (楼上说的文字和字节流): Text 是人看的,文本文件里面写的字符串是 Text 。 Binary data 是机器存的。保存文件 Text -encode-> Binary data ;打开 Binary data -decode-> Text 。 Python3 是一一对应:, str 对应 Text , bytes 对应 Binary data 。 str encode 成为 bytes , bytes decode 成为 str 。你附图里的操作很好的说明,“好”和 u “好”都是 str 。 Python2 中 bytes 对应 binary data (等同于 python3 的 bytes ),而 str 是 text 也可以是 binary data 。“好”和 u “好”不同, u “好”( unicode )才是真正的 str 。 a="好"(py2) 等价 a=b'\xe5\xa5\xbd'(py2) 等价 a=b'\xe5\xa5\xbd'(py3)。 type 为 bytes(py3),可被 decode 。 a=u"好"(py2) 等价 a="好"(py3) 等价 a=u"好"(py3)。 type 为 str(py3),可被 encode 。 |
3
Gandum 2017-02-25 08:04:21 +08:00
那么不如尝试一下这个问题:
在 Windows 下用 Winzip 压缩的 zip 包,其中包含中文的文件名,在 Linux 中被解压,产生的文件名乱码问题如何解决(分别用 Python2 和 Python3 ) |