Эта кодировка называется Quoted-printable. В вашем примере у вас есть строка (Python unicode
), закодированная в байтах UTF-8 (Python's str
), закодированная в кавычках для печати. Таким образом, правильный способ получить строковое значение:
>>> b = 'PLANO DE S=C3=9ADE'
>>> s = b.decode('quopri').decode('utf-8')
>>> print s
PLANO DE SÚDE
Обновление: Могут быть некоторые проблемы с консолью. s
содержит полностью правильное строковое значение Unicode (типа Python unicode
). Но когда вы используете оператор print
, значение должно быть преобразовано в байты (Python str
) для записи в номер дескриптора файла ОС 1
(стандартный канал вывода). Таким образом, реализация оператора print
проверяет кодировку консоли, затем делает некоторые предположения и печатает результаты. Фактически, в Python 2 результаты будут отличаться для печати из интерактивной оболочки, если ваш процесс будет выполняться не в интерактивном режиме, а процесс будет выполняться при перенаправлении вывода в файл.
Наилучший способ вывода закодированных строк в Python 2 не согласован. Два наиболее разумных способа:
1) Используйте locale
кодировку и вручную кодируйте строки.
import locale
ENCODING = locale.getpreferredencoding()
print s.encode(ENCODING)
2) Используйте параметр кодирования (командная строка, жестко запрограммированный или любой другой).
from getopt import getopt
ENCODING = 'UTF-8'
opts, args = getopt(sys.argv[1:], '', ['encoding='])
for opt, arg in opts:
if opt == '--encoding':
ENCODING = arg
print s.encode(ENCODING)
Обновление 2: Если ничего не помогает, и вы все еще уверены, что кодировка и шрифт консоли установлены на UTF-8, попробуйте следующее:
import sys, os
ENCODING = 'UTF-8'
stdout = os.fdopen(sys.stdout.fileno(), 'wb')
s = u'привет' # Don't forget to use a Unicode literal staring with u''
stdout.write(s.encode(ENCODING))
На этом этапе вы должны увидеть русское слово привет
в наборе кириллицы на вашей консоли:)
Если это так, то вы должны использовать этот двоичный файл stdout
вместо обычного sys.stdout
.