【问题标题】:Strange notation for Python 3 bytesPython 3 字节的奇怪符号
【发布时间】:2017-05-16 05:54:23
【问题描述】:

有人能确定这些bytes 的符号是什么吗?乍一看,我倾向于认为“十六进制”,但我不知道xf1Ye1fl 之类的东西是什么:

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

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

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

【问题讨论】:

    标签: python python-3.x character-encoding byte python-3.5


    【解决方案1】:

    你是对的——这是一个十六进制表示法。

    在字节文字中,任何不能由可打印 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'
    

    escape sequences in Python string and bytes objects 的文档有更多关于 Python 理解的转义序列的信息(尽管上面的那些是它用来表示字节对象的唯一)。

    【讨论】:

    • 谢谢!是的,这就是让我困惑的地方。我不知道它在 /x__ 十六进制代码旁边混合了文字字符描述。
    • 非常感谢!我终于明白了这一点。 -
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    相关资源
    最近更新 更多