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

发布于 2021-01-29 15:05:43

我目前正在将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接收所需的输出。

关注者
0
被浏览
85
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    字节序列C3 BE是字符U +
    00FE
    的UTF-8编码表示形式

    Python 2将字符串作为字节序列而不是字符来处理。所以'\xfe'是一个str含有一个字节对象。

    在Python
    3中,字符串是(Unicode)字符的序列。因此,代码'\xfe'是一个包含一个字符的字符串。当您打印字符串时,必须将其编码为字节。由于您的环境选择了UTF-8的默认编码,因此已对其进行了相应编码。

    如何解决这个问题取决于您的数据。是字节还是字符?如果是字节,则更改代码以告知解释器:
    print(b'\xfe')。如果它是字符,但是您想要不同的编码,则对字符串进行相应的编码:print( '\xfe'.encode('latin1') )



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看