линия # coding=utf-8
только помогает писать юникод буквальным и не использовать для простых строк байт. В любом случае, предполагая, что ваш файл Python кодируется в кодировке UTF-8, строка str = str.decode('utf-8')
дает правильную строку в Юникоде.
Но как сказал Ansgar Wiechers, как вы объявить кодировку проще всего было бы непосредственно использовать юникод litteral:
str = u"35 μg/m3"
Просто консоль для Windows имеет плохую поддержку UTF8. Обычными кодировками являются win1252 (вариант latin1) или cp850 - собственный шрифт OEM. Если вы не хотите явно иметь дело с явным кодирования, лучше всего, чтобы непосредственно отобразить Юникода строку:
#!/usr/bin/python
# coding=utf-8
str ="35 μg/m3"
str = str.decode('utf-8') # str is now an unicode string
print(str)
Если вы хотите явно использовать latin1, и при условии, что вы используете TrueType шрифт такой в Lucida Console или Consolas, вы можете сделать:
chcp 1252
python .\encoding.py
с
#!/usr/bin/python
# coding=utf-8
str ="35 μg/m3"
str = str.decode('utf-8') # str is now an unicode string
str = str.encode('latin1') # str is now an latin1 encoded byte string
print(str)
вы не должны кодировать первый, а затем декодировать/непосредственно печатать? –
Вы собираетесь использовать Python3, если вы имеете дело с unicode, если не можете. Или просто как боль. –
Прекрасно работает на Python 2.7.9 ... возможно, попробуйте '# - * - кодирование: latin-1 - * -' ... –