Почему все мои строки напечатаны как строковые литералы? [Дубликат]

57
задан jamylak 25 May 2013 в 10:38
поделиться

3 ответа

Если данные находятся в формате, совместимом с UTF-8, вы можете преобразовать байты в строку.

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

Опционально сначала конвертировать в hex, если данные еще не совместимы с 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
1
ответ дан Frank 17 August 2018 в 18:57
поделиться

Если байты уже используют соответствующую кодировку символов; вы можете распечатать их напрямую:

sys.stdout.buffer.write(data)

или

nwritten = os.write(sys.stdout.fileno(), data)  # NOTE: it may write less than len(data) bytes
15
ответ дан jfs 17 August 2018 в 18:57
поделиться

Используйте decode:

>>> print(curses.version.decode('utf-8'))
2.2
66
ответ дан sdaau 17 August 2018 в 18:57
поделиться
  • 1
    .decode() по умолчанию декодирует «utf-8» – jamylak 25 May 2013 в 10:51
  • 2
    Помните, что вы можете принять свой собственный ответ. – Tim 18 September 2016 в 15:40
  • 3
    @jamylak напоминает, что он может принимать параметр – Jemshit Iskenderov 27 December 2017 в 13:32
  • 4
    Как это сделать по умолчанию, я имею в виду, плохо ли использовать utf-8 по умолчанию? Я не хочу использовать .decode('utf-8') каждый раз, когда я что-то печатаю. – Shubham A. 10 January 2018 в 15:09
Другие вопросы по тегам:

Похожие вопросы: