История изменений
Исправление
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
.