【问题标题】:Print without b' prefix for bytes in Python 3在 Python 3 中打印不带 b\' 前缀的字节
【发布时间】:2022-04-25 13:34:03
【问题描述】:

如何在 Python 3 中打印没有 b' 前缀的 bytes 字符串?

>>> print(b'hello')
b'hello'

【问题讨论】:

标签: python string python-3.x


【解决方案1】:

使用decode

>>> print(b'hello'.decode())
hello

【讨论】:

  • @jamylak 提醒它可以接受参数
  • 默认情况下如何做到这一点,我的意思是,默认使用utf-8是不是很糟糕?我不想每次打印东西时都使用.decode('utf-8')
  • 创建自定义打印
  • 一定要检查 curses.version 不是 None
【解决方案2】:

如果字节已经使用了适当的字符编码;您可以直接打印它们:

sys.stdout.buffer.write(data)

或者

nwritten = os.write(sys.stdout.fileno(), data)  # NOTE: it may write less than len(data) bytes

【讨论】:

    【解决方案3】:

    如果数据采用 UTF-8 兼容格式,则可以将字节转换为字符串。

    >>> print(str(b"hello", "utf-8"))
    hello
    

    或者,如果数据不兼容 UTF-8(例如数据是原始字节),则首先转换为十六进制。

    >>> from binascii import hexlify
    >>> print(hexlify(b"7"))
    b'1337'
    >>> print(str(hexlify(b"7"), "utf-8"))
    1337
    
    >>> from codecs import encode  # alternative
    >>> print(str(encode(b"7", "hex"), "utf-8"))
    1337
    

    【讨论】:

      【解决方案4】:

      根据bytes.__repr__ 的来源,b'' 被烘焙到方法中。

      一种解决方法是从生成的repr() 中手动切掉b''

      >>> x = b''
      
      >>> print(repr(x))
      b''
      
      >>> print(repr(x)[2:-1])
      
      

      【讨论】:

      • 旁注:我认为没有其他答案真的回答问题。
      • 我想我会同意:您的解决方案,即repr(x)[2:-1],会生成一个str 对象,该对象将如愿打印。特别是,repr(b'')[2:-1] 返回字符串\x01,而decode() 将返回,这与print() 不同。更明确地说,print(repr(b'')[2:-1]) 将打印 print(b''.decode()) 不会打印任何内容。
      • 或者,print(repr(b"".decode())) 将打印 ''(包含单引号的字符串),以便 print(repr(b"".decode())[1:-1]) 打印 (不包含单引号的字符串)。
      【解决方案5】:

      显示或打印:

      <byte_object>.decode("utf-8")
      

      编码或保存:

      <str_object>.encode('utf-8')
      

      【讨论】:

        【解决方案6】:

        我有点晚了,但是对于 Python 3.9.1,这对我有用并删除了 -b 前缀:

        print(outputCode.decode())
        

        【讨论】:

        • 在 Raspberry Pi 上使用 Python 3.7.3
        【解决方案7】:

        就是这么简单... (这样,您可以对字典和列表字节进行编码,然后可以使用 json.dump / json.dumps 对其进行字符串化)

        你只需要使用base64

        import base64
        
        data = b"Hello world!" # Bytes
        data = base64.b64encode(data).decode() # Returns a base64 string, which can be decoded without error.
        print(data)
        

        默认情况下有些字节无法解码(图片是示例),因此base64会将这些字节编码为可以解码为字符串的字节,以检索字节只需使用

        data = base64.b64decode(data.encode())
        

        【讨论】:

          【解决方案8】:

          使用 decode() 而不是 encode() 将字节转换为字符串。

          >>> import curses
          >>> print(curses.version.decode())
          2.2
          

          【讨论】:

            猜你喜欢
            • 2013-05-20
            • 2020-03-18
            • 2016-12-10
            • 2015-05-30
            • 2020-11-22
            • 1970-01-01
            • 1970-01-01
            • 2017-03-13
            相关资源
            最近更新 更多