Кодировка io.StringIO в python3
Кажется, я не могу найти кодировку по умолчанию для io.StringIO
в Python3. Это локаль как с stdio
?
Как я могу это изменить?
С stdio
Кажется, что просто открытие с правильным кодированием работает, но нет такой вещи, как открытие StringIO
,
2 ответа
Класс io.StringIO
работает с str
объекты в Python 3. То есть, вы можете только читать и записывать строки из StringIO
пример. Кодирования нет - вы должны выбрать один, если хотите кодировать строки, полученные из StringIO
в bytes
объект, но сами строки не имеют кодировки.
(Конечно, строки должны быть внутренне представлены в некоторой кодировке. В зависимости от вашего интерпретатора, эта кодировка является либо UCS-2, либо UCS-4, но вы не видите этой детали реализации при работе с Python.)
Как уже упоминалось в другом ответе, StringIO
сохраняет (unicode) строки в памяти и поэтому не имеет кодировки. Если вам нужен похожий объект с кодировкой, вы можете посмотреть на BytesIO
,
Если вы хотите установить кодировку stdout: вы не можете. По крайней мере, не напрямую, так как sys.stdout.encoding
только для записи и (часто) автоматически определяется Python. (Не работает при использовании каналов) Если вы хотите записать байтовые строки с определенной кодировкой в стандартный вывод, то вы либо просто кодируете строки, которые вы печатаете, с правильной кодировкой (Python 2), либо используете sys.stdout.buffer.write()
(Python 3) для отправки уже закодированных байтов в stdout.