파이썬 3에서 바이트에 대해 b '접두사없이 억제 / 인쇄


112

항상 나를 괴롭히는 것처럼 보이기 때문에 나중에 검색 할 수 있도록 이것을 게시하십시오.

$ 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파이썬 3에서 b'접두사 없이 바이너리 ( ) 문자열 을 인쇄하는 방법은 무엇입니까?


답변:


111

사용 decode:

print(curses.version.decode())
# 2.2

1
@jamylak 그것은 매개 변수를 받아 들일 수 있다는 것을 상기시킨다
Jemshit Iskenderov dec.

1
기본적으로이 작업을 수행하는 방법은 기본적으로 사용 utf-8하는 것이 좋지 않습니까? 나는 .decode('utf-8')무언가를 인쇄 할 때마다 사용하고 싶지 않습니다 .
Shubham A.

사용자 정의 인쇄 만들기
SmartManoj

curses.versionNone이 아닌지 확인하십시오
cowlinator

24

바이트가 이미 적절한 문자 인코딩을 사용하는 경우; 직접 인쇄 할 수 있습니다.

sys.stdout.buffer.write(data)

또는

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

12

의 소스를 살펴보면 이 메서드에 구워진 bytes.__repr__것처럼 보입니다 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

6
참고 사항 : 다른 답변 중 어떤 것도 진정으로 질문에 답하지 않는다고 생각합니다 .
Mateen Ulhaq 19

나는 동의 할 것이라고 생각합니다. 귀하의 솔루션, 즉는 원하는대로 인쇄 repr(x)[2:-1]str개체를 생성합니다 . 특히, repr(b'\x01')[2:-1]문자열을 반환 \\x01하면서, decode()반환 \x01하나와 함께 할 것 같은 일을하지 않는 print(). 더 명확 print(repr(b'\x01')[2:-1])하게 말하면는 인쇄 \x01하지만 print(b'\x01'.decode())아무것도 인쇄하지 않습니다.
Antoine

또한, print(repr(b"\x01".decode()))인쇄 할 수 '\x01'있도록, (작은 따옴표를 포함하는 문자열을) print(repr(b"\x01".decode())[1:-1])인쇄 \x01(작은 따옴표가없는 문자열).
Antoine

11

데이터가 UTF-8 호환 형식이면 바이트를 문자열로 변환 할 수 있습니다.

>>> import curses
>>> print(str(curses.version, "utf-8"))
2.2

데이터가 아직 UTF-8과 호환되지 않는 경우 선택적으로 먼저 16 진수로 변환합니다. 예를 들어 데이터가 실제 원시 바이트 인 경우.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.