在Python2和Python3中编写不同的十六进制值
我目前正在将Python2脚本移植到Python3,并在此行遇到问题:
print('\xfe')
当我使用Python2运行它时python test.py > test.out
,该文件由十六进制值组成FE 0A
,如预期的那样。
但是,当我使用Python3运行它时python3 test.py > test.out
,文件由hex-values组成C3 BE 0A
。
这是怎么了 如何FE 0A
使用Python3接收所需的输出。
-
字节序列
C3 BE
是字符U +
00FE的UTF-8编码表示形式。Python 2将字符串作为字节序列而不是字符来处理。所以
'\xfe'
是一个str
含有一个字节对象。在Python
3中,字符串是(Unicode)字符的序列。因此,代码'\xfe'
是一个包含一个字符的字符串。当您打印字符串时,必须将其编码为字节。由于您的环境选择了UTF-8的默认编码,因此已对其进行了相应编码。如何解决这个问题取决于您的数据。是字节还是字符?如果是字节,则更改代码以告知解释器:
print(b'\xfe')
。如果它是字符,但是您想要不同的编码,则对字符串进行相应的编码:print( '\xfe'.encode('latin1') )
。