Python2和Python3之间的字符编码

我有一个x定义如下的字符串

x = b'LF                                                           \xa9 2020 by S&P Global Inc.,200523\n'

在iPython2中

In [10]: x
Out[10]: 'LF                                                           \xa9 2020 by S&P Global Inc.,200523\n'

In [11]: print(x)
LF                                                           � 2020 by S&P Global Inc.,200523

In [12]: x.decode('ISO-8859-1')
Out[12]: u'LF                                                           \xa9 2020 by S&P Global Inc.,200523\n'

In [13]: print(x.decode('ISO-8859-1'))
LF                                                           © 2020 by S&P Global Inc.,200523

问题1:为什么xprint(x)的输出不同?x.decode('ISO-8859-1')print(x.decode('ISO-8859-1'))之间相同

在iPython3中

In [3]: x                                                                                                                                                                                           
Out[3]: b'LF                                                           \xa9 2020 by S&P Global Inc.,200523\n'

In [4]: print(x)                                                                                                                                                                                    
b'LF                                                           \xa9 2020 by S&P Global Inc.,200523\n'

In [5]: x.decode('ISO-8859-1')                                                                                                                                                                      
Out[5]: 'LF                                                           © 2020 by S&P Global Inc.,200523\n'

In [7]: print(x.decode('ISO-8859-1'))                                                                                                                                                               
LF                                                           © 2020 by S&P Global Inc.,200523

问题2:如您所见,在Python3中,x和print(x)的输出是相同的。x.decode('ISO-8859-1')和print(x.decode('ISO-8859-1'))也是如此。在Python2中,情况并非如此。为什么在Python2和Python3之间有这种区别?

问题3:为什么Python 2和3中print(x)输出不同,x的输出相同?

问题4:为什么Python 2和3中x.decode('ISO-8859-1')的输出不同,但是打印相同?

布拉德·所罗门

问题1:为什么x和print(x)的输出不同?

只需输入xREPL即可认为是:

>>> print repr(x)
'LF                                                           \xa9 2020 by S&P Global Inc.,200523\n'

问题2:如您所见,在Python3中,x和print(x)的输出是相同的。x.decode('ISO-8859-1')和print(x.decode('ISO-8859-1'))也是如此。在Python2中,情况并非如此。为什么在Python2和Python3之间有这种区别?

因为xbytesPython 3中的一个对象,所以print()不会尝试解码字节串。Python 3bytes表示法使用相应的转义序列显示超过127个二进制值。

问题3:为什么Python 2和3中的print(x)输出不同,x的输出相同?

因为repr(x)在Python 2和3上提供了相同的功能。

问题4:为什么Python 2和3中x.decode('ISO-8859-1')的输出不同,但是打印相同?

因为x.decode('ISO-8859-1')在Python 2中,Python 2中产生了一个unicode对象,而str在Python 3中则产生了一个对象,__repr__()它们在显示非ASCII方式上有所不同。


如果您想更全面地阅读这些内容,请查看《Python:无痛指南》中的Unicode和字符编码(公开:我写的。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python2和python3之间的可移植元类

来自分类Dev

Python3和Python2之间的区别-socket.send数据

来自分类Dev

捕获标准输出时python2和python3之间的StringIO可移植性

来自分类Dev

python2和python3之间的可移植元类

来自分类Dev

python2和python3中dict的__repr __()

来自分类Dev

正确处理Python2和Python3

来自分类Dev

正确处理Python2和Python3

来自分类Dev

Python3:有没有办法像python2一样使用telnetlib,而没有ascii编码和b前缀?

来自分类Dev

Python2和Python3:__init__和__new__

来自分类Dev

Python3和pip3 +为python2安装的轮子也可以用于python3

来自分类Dev

使用python2和python3在stderr上编写的函数

来自分类Dev

以与python2和python3兼容的方式将字节写入标准输出

来自分类Dev

select()在python2和python3上的行为是否有所不同?

来自分类Dev

使用python2和python3创建一个virtualenv

来自分类Dev

在Python2和Python3中编写不同的十六进制值

来自分类Dev

如何分别为python3和python2设置不同的PYTHONPATH变量

来自分类Dev

Ansible json_query在python3和python2中的不同结果

来自分类Dev

为什么Python2和Python3的行为不同

来自分类Dev

使用 python3 和 python2 构建分发包的区别?

来自分类Dev

使用多个 Pipfiles 支持 python2 和 python3

来自分类Dev

Python2 和 Python3 中的 bytes.decode()

来自分类Dev

python2和3之间带有前导零的数字之间的差异。

来自分类Dev

Bottle mishandling JSON data in Python3, but not Python2

来自分类Dev

python2中的python3 datetime.timestamp?

来自分类Dev

在终端中用python3替换python2?

来自分类Dev

Python3 无法识别的 Python2 包

来自分类Dev

python3 virtualenv 安装 python2

来自分类Dev

Python2 与 Python3 - 解析 JSON

来自分类Dev

Python2 / 3中__new__和__init__顺序之间的区别

Related 相关文章

  1. 1

    python2和python3之间的可移植元类

  2. 2

    Python3和Python2之间的区别-socket.send数据

  3. 3

    捕获标准输出时python2和python3之间的StringIO可移植性

  4. 4

    python2和python3之间的可移植元类

  5. 5

    python2和python3中dict的__repr __()

  6. 6

    正确处理Python2和Python3

  7. 7

    正确处理Python2和Python3

  8. 8

    Python3:有没有办法像python2一样使用telnetlib,而没有ascii编码和b前缀?

  9. 9

    Python2和Python3:__init__和__new__

  10. 10

    Python3和pip3 +为python2安装的轮子也可以用于python3

  11. 11

    使用python2和python3在stderr上编写的函数

  12. 12

    以与python2和python3兼容的方式将字节写入标准输出

  13. 13

    select()在python2和python3上的行为是否有所不同?

  14. 14

    使用python2和python3创建一个virtualenv

  15. 15

    在Python2和Python3中编写不同的十六进制值

  16. 16

    如何分别为python3和python2设置不同的PYTHONPATH变量

  17. 17

    Ansible json_query在python3和python2中的不同结果

  18. 18

    为什么Python2和Python3的行为不同

  19. 19

    使用 python3 和 python2 构建分发包的区别?

  20. 20

    使用多个 Pipfiles 支持 python2 和 python3

  21. 21

    Python2 和 Python3 中的 bytes.decode()

  22. 22

    python2和3之间带有前导零的数字之间的差异。

  23. 23

    Bottle mishandling JSON data in Python3, but not Python2

  24. 24

    python2中的python3 datetime.timestamp?

  25. 25

    在终端中用python3替换python2?

  26. 26

    Python3 无法识别的 Python2 包

  27. 27

    python3 virtualenv 安装 python2

  28. 28

    Python2 与 Python3 - 解析 JSON

  29. 29

    Python2 / 3中__new__和__init__顺序之间的区别

热门标签

归档