问题:在Python 3中禁止/打印不带b’前缀的字节
只需发布此内容,以便稍后查找,因为它总是让我感到困惑:
$ python3.2
Python 3.2 (r32:88445, Oct 20 2012, 14:09:50)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
>>> print(curses.version)
b'2.2'
>>> print(str(curses.version))
b'2.2'
>>> print(curses.version.encode('utf-8'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'
>>> print(str(curses.version).encode('utf-8'))
b"b'2.2'"
问题:如何bytes
在Python 3中打印不带b'
前缀的二进制()字符串?
回答 0
用途decode
:
print(curses.version.decode())
# 2.2
回答 1
如果字节已经使用适当的字符编码;您可以直接打印它们:
sys.stdout.buffer.write(data)
要么
nwritten = os.write(sys.stdout.fileno(), data) # NOTE: it may write less than len(data) bytes
回答 2
如果我们看一下的源代码b''
是将烘焙到方法中一样。
最明显的解决方法是b''
从结果中手动切片repr()
:
>>> x = b'\x01\x02\x03\x04'
>>> print(repr(x))
b'\x01\x02\x03\x04'
>>> print(repr(x)[2:-1])
\x01\x02\x03\x04
回答 3
如果数据采用UTF-8兼容格式,则可以将字节转换为字符串。
>>> import curses
>>> print(str(curses.version, "utf-8"))
2.2
如果数据尚不兼容UTF-8,则可以选择先转换为十六进制。例如,当数据是实际的原始字节时。
from binascii import hexlify
from codecs import encode # alternative
>>> print(hexlify(b"\x13\x37"))
b'1337'
>>> print(str(hexlify(b"\x13\x37"), "utf-8"))
1337
>>>> print(str(encode(b"\x13\x37", "hex"), "utf-8"))
1337
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。