Просто разместите это, чтобы я мог поискать его позже, так как это всегда меня ставит в тупик:
$ 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
строку binary ( ) в Python 3 без b'
префикса?
python
string
python-3.x
sdaau
источник
источник
Ответы:
Использование
decode
:источник
utf-8
по умолчанию? Я не хочу использовать его.decode('utf-8')
каждый раз, когда что-то печатаю.curses.version
это не NoneЕсли в байтах уже используется соответствующая кодировка символов; вы можете распечатать их напрямую:
или
источник
Если мы посмотрим на исходный код
bytes.__repr__
, он выглядит так, как будтоb''
он встроен в метод.Наиболее очевидный обходной путь - вручную вырезать
b''
полученный результатrepr()
:источник
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())
ничего не печатать.print(repr(b"\x01".decode()))
будет печататься'\x01'
(строка, включая одинарные кавычки), так чтоprint(repr(b"\x01".decode())[1:-1])
печатает\x01
(строка без одинарных кавычек).Если данные находятся в формате, совместимом с UTF-8, вы можете преобразовать байты в строку.
При желании сначала преобразовать в шестнадцатеричный формат, если данные еще не совместимы с UTF-8. Например, когда данные представляют собой необработанные байты.
источник