Python 3字节的奇怪符号

发布于 2021-01-29 17:33:57

有人可以识别这些表示法bytes是什么吗?乍一看,我倾向于认为“十六进制”,但我不承认有什么事情想xf1Ye1fl有:

b'vy\xe9\xb5\xa2\xba\xf1Y\xe8\xe1fl\x1d\x87\xacC'

当我使用进行编码时,我得到了这个some_text.encode('utf-8')

我正在尝试获取可传递给与Python 2的字节字符串一起使用的加密方法的字节。

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

    您是对的-这是一个十六进制表示法。

    在字节字面量中,任何不能由可打印ASCII字符(或标准转义字符之一\n\t\r\xNN表示的字节都表示为,其中NN是该字节的2位十六进制表示形式。

    让您感到困惑的是,您误会了例如\xf1Y单个转义序列,而实际上它代表了两个单独的字节:

    >>> len(b'\xf1Y')
    2
    >>> [bytes([b]) for b in b'\xf1Y']
    [b'\xf1', b'Y']
    

    如果遍历一个字节对象,您将获得字节的整数值:

    >>> list(b'vy\xe9\xb5\xa2\xba\xf1Y\xe8\xe1fl\x1d\x87\xacC')
    [118, 121, 233, 181, 162, 186, 241, 89, 232, 225, 102, 108, 29, 135, 172, 67]
    >>> bytes([118])
    b'v'
    >>> bytes([121])
    b'y'
    >>> bytes([233])
    b'\xe9'
    

    Python字符串和字节对象中的转义序列的文档提供了有关Python理解的转义序列的更多信息(尽管上面的代码是它用来表示字节对象的唯一信息)。



知识点
面圈网VIP题库

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

去下载看看