Кодировка io.StringIO в python3 - PullRequest
5 голосов
/ 21 февраля 2012

Я не могу найти кодировку по умолчанию для io.StringIO в Python3.Это локаль как с stdio?

Как я могу это изменить?

С stdio, кажется, что просто открывается с правильным кодированием, но нет такой вещи как открытиеStringIO.

Ответы [ 2 ]

8 голосов
/ 21 февраля 2012

Класс io.StringIO работает с str объектами в Python 3. То есть вы можете читать и записывать строки только из экземпляра StringIO.Кодирования нет - вы должны выбрать один, если хотите кодировать строки, полученные из StringIO в bytes объекте, но сами строки не имеют кодировки.

(КонечноСтроки должны быть внутренне представлены в некоторой кодировке. В зависимости от вашего интерпретатора, эта кодировка - UCS-2 или UCS-4, но вы не видите эту деталь реализации при работе с Python.)

4 голосов
/ 13 октября 2013

Как уже упоминалось в другом ответе, StringIO сохраняет (unicode) строки в памяти и, следовательно, не имеет кодировки. Если вам нужен подобный объект с кодировкой, вы можете взглянуть на BytesIO.

Если вы хотите установить кодировку stdout: вы не можете. По крайней мере, не напрямую, поскольку sys.stdout.encoding только для записи и (часто) автоматически определяется Python. (Не работает при использовании труб) Если вы хотите записать байтовые строки с определенной кодировкой в ​​стандартный вывод, то вы либо просто кодируете строки, которые вы печатаете, с правильной кодировкой (Python 2), либо используете sys.stdout.buffer.write() (Python 3) для отправки уже закодированных байтовых строк в стандартный вывод.

...