我有一个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:为什么x和print(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)的输出不同?
只需输入x
REPL即可认为是:
>>> 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之间有这种区别?
因为x
是bytes
Python 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] 删除。
我来说两句