Кодировка 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.

Другие вопросы по тегам