Заголовок coding
в вашем исходном файле сообщает Python, в какой кодировке находится ваш исходный код . Это кодировка, которую Python использует для декодирования источника строкового литерала Unicode (u"Par Catégorie"
) в объект Unicode , Сам объект Unicode не имеет кодировки; это необработанные данные Unicode. (Внутренне, Python будет использовать одну из двух кодировок, в зависимости от того, как он был настроен, но код Python не должен беспокоиться об этом.)
UnicodeDecodeError, которое вы получаете, означает, что где-то вы смешиваете строки юникода и строки байтов (обычные строки). При их смешивании (конкатенация, интерполяция строк и т. Д.) Python попытается преобразовать строку байтов в строку юникода путем декодирования строка байтов, использующая кодировку по умолчанию, ASCII. Если строка содержит не-ASCII-данные, произойдет сбой с появившейся ошибкой. Выполняемая операция может быть где-то в библиотеке, но это все равно означает, что вы смешиваете входы разных типов.
К сожалению, тот факт, что он будет работать нормально, пока строки байтов содержат только данные ASCII, означает, что этот тип ошибок слишком часто встречается даже в коде библиотеки. Python 3.x решает эту проблему, избавляясь от неявного преобразования между строками юникода (просто str
в 3.x) и строками байтов (тип bytes
в 3.x.)