В вашем примере вы используете строковый литерал не-Unicode, содержащий не-ascii символы, в результате чего prda
становится строкой байтов .
Для этого Python используетsys.stdin.encoding
для автоматического кодирования строки.В вашем случае это означает, что строка кодируется как "utf-8".
Чтобы преобразовать prda
в unicode объект, вам необходимо декодировать его, используя соответствующую кодировку:
>>> print prda.decode('utf-8')
šđćč
Обратите внимание, что в скрипте или модуле вы не можете полагаться на python, чтобы автоматически угадывать кодировку - вам необходимо явно отменить кодировку в верхней части файла, например:
# -*- coding: utf-8 -*-
Всякий раз, когда вы сталкиваетесь с ошибками Unicode в Python 2, это очень часто, потому что ваш код смешивает байтовые строки со строками Unicode.Поэтому вы всегда должны проверять, какая строка вызывает ошибку, используя type(string)
.
Если строковым объектом является <type 'str'>
, но вам нужен Unicode, декодируйте , используясоответствующая кодировка.Если строковый объект <type 'unicode'>
, но вам нужны байты, кодируйте , используя соответствующую кодировку.