В Python 2: Обычные строки (Python 2.x str
) не имеют кодировки: они являются необработанными данными.
В Python 3: Они называются «байтами», что является точным описанием, поскольку они представляют собой просто последовательности байтов, которые могут быть закодированы в тексте в любой кодировке (некоторые из них общие!) или нетекстовые данные в целом.
Для представления text вам нужны строки Unicode, а не байтовые строки. Под "строками Unicode" я имею в виду unicode
экземпляры в Python 2 и str
экземпляры в Python 3. Строки Unicode - это последовательности кодовых точек Unicode, представленные абстрактно без кодировки; это хорошо подходит для представления текста.
Строки байтов важны, потому что для представления данных для передачи по сети или записи в файл или что-то еще у вас не может быть абстрактного представления юникода, вам нужно конкретное представление байтов. Хотя они часто используются для хранения и представления текста, это, по крайней мере, немного непослушно.
Вся эта ситуация осложняется тем фактом, что, хотя вы должны превратить юникод в байты, вызвав encode
и превратить байты в юникод, используя decode
, Python попытается сделать это автоматически, используя Вы можете установить глобальную кодировку, которая по умолчанию является ASCII, что является самым безопасным выбором. Никогда не полагайтесь на это для своего кода и никогда не меняйте его на более гибкую кодировку - явно декодируйте, когда вы получаете строку байтов, и кодируйте, если вам нужно отправить строку куда-то за пределы.