LINUX.ORG.RU

История изменений

Исправление emorozov, (текущая версия) :

текст в Python’е конкретно UTF-8. И если пытаться передавать ей произвольные байты, то вылазит ошибка типов данных.

Нет, в Python есть тип str, который хранит текст Unicode. Не UTF-8, т.к. UTF-8 — это конкретное байтовое представление. Внутри для этого используется UCS-4, кажется, но это неважно, т.к. деталь реализации.

И есть тип bytes, который просто набор байтов, которые интерпретатор не пытается никак интерпретировать.

str можно преобразовать в bytes, указав при этом, какую кодировку необходимо использовать для преобразования unicode-текста в байтовое представление. Например, utf-8. И наоборот: bytes можно преобразовать в str, указав при этом кодировку, в которой записан побайтово текст.

Без хорошего понимания этих вещей невозможно написать ни один скрипт на Python, который будет читать или писать текст на экран или в файлы.

Я не знаю: возможно в pipes был какой-то баг с str/bytes, но учитывая, что за всё время, что я работаю с Python, такого не было, думаю, что ошибка была всё-таки не в pipes.

Исходная версия emorozov, :

текст в Python’е конкретно UTF-8. И если пытаться передавать ей произвольные байты, то вылазит ошибка типов данных.

Нет, в Python есть тип str, который хранит текст Unicode. Не UTF-8, т.к. UTF-8 — это конкретное байтовое представление. Внутри для этого используется UCS-4, кажется, но это неважно, т.к. деталь реализации.

И есть тип bytes, который просто набор байтов, которые интерпретатор не пытается никак интерпретировать.

str можно преобразовать в bytes, указав при этом, какую кодировку необходимо использовать для преобразования unicode-текста в байтовое представление. Например, utf-8. И наоборот: bytes можно преобразовать в str, указав при этом кодировку, в которой записан побайтово текст.

Без хорошего понимания этих вещей невозможно написать ни один скрипт на Python, который будет читать или писать текст на экран или в файлы.

Я не знаю: возможно в pipes был какой-то баг с str/bytes, но учитывая, что за всё время, что я работаю с Python, такого не было (впрочем, в Python 2 ситуация с Unicode была несколько сложнее и запутанее), думаю, что ошибка была всё-таки не в pipes.