V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
woniu127
V2EX  ›  问与答

python3 和 python2 的编码与解码差别很大吗?

  •  
  •   woniu127 · 2017-02-25 00:41:47 +08:00 · 3261 次点击
    这是一个创建于 2840 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天读取数据时,出现 decode error ,遂决定好好研究下 python decode 和 encode ,看了几篇 v2 大牛的帖子( https://www.v2ex.com/t/339142 ),自以为已经明白,编码( encode)是字符转为字节流,解码( decode )是字节流转为字符。

    于是在 pycharm 试了试,又陷入了疑惑。。。(我用的 python3)

    字符格式前加不加'u'都是 str 格式,另外感觉和 python2 的 decode , encode 正好是反的,是我学了假 python ,还是长了个假脑子。

    具体看图吧(直接传我网站上了)

    http://xiaoyanyou.com/?attach-download-30.htm

    http://xiaoyanyou.com/?attach-download-31.htm
    4 条回复    2017-02-25 09:53:04 +08:00
    Sylv
        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 ,是字节流,相同文字用不同编码生成的字节流是不一样的。
    AvenirX
        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 。
    Gandum
        3
    Gandum  
       2017-02-25 08:04:21 +08:00
    那么不如尝试一下这个问题:
    在 Windows 下用 Winzip 压缩的 zip 包,其中包含中文的文件名,在 Linux 中被解压,产生的文件名乱码问题如何解决(分别用 Python2 和 Python3 )
    woniu127
        4
    woniu127  
    OP
       2017-02-25 09:53:04 +08:00 via Android
    @AvenirX 谢谢解答,理解了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6034 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:10 · PVG 10:10 · LAX 18:10 · JFK 21:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.