Двоичные данные в Unicode - PullRequest
       38

Двоичные данные в Unicode

1 голос
/ 23 февраля 2011

Среди всех доступных здесь кодировок http://docs.python.org/library/codecs.html какой из них мне следует использовать для декодирования двоичных данных в юникод, чтобы они не были повреждены при кодировании обратно в строку?

Я использовал raw_unicode_data, и он не работает.

Пример: я загружаю картинку в POST (но не в виде вложения). Django преобразует данные POST в Unicode, используя utf-8. Однако при обратном преобразовании из юникода в строку (снова с использованием utf-8) данные становятся поврежденными. Я использовал raw_unicode_data, и то же самое произошло (хотя на этот раз только несколько байтов). Какую кодировку следует использовать, чтобы шаги декодирования и кодирования не повредили данные.

Ответы [ 3 ]

7 голосов
/ 23 февраля 2011

Если вы хотите опубликовать двоичные данные, используйте кодировку base64.

http://docs.python.org/library/base64.html

3 голосов
/ 23 февраля 2011

«Двоичные данные» не являются текстовыми, поэтому преобразование их в unicode не имеет смысла. Если в двоичные данные встроен текст, то сначала извлеките его и декодируйте, используя кодировку, приведенную в спецификации для формата данных.

1 голос
/ 24 февраля 2011

Как уже говорили другие, ваш вопрос не особенно понятен. Если вы хотите направлять двоичные данные через текстовый канал (например, POST), тогда base64 - это правильный формат для использования с соответствующими операциями преобразования данных на клиенте и сервере (двоичные данные -> текст base64 -> передача текстовый канал -> base64 текст -> двоичные данные).

В качестве альтернативы, если вы хотите допустить неправильно закодированный текст (например, как Python 3 пытается сделать для некоторых интерфейсов, таких как пути к файлам и переменные среды), то Python 3.1 и более поздние версии предлагают обработчик ошибок surrogatescape, который преобразует недопустимые значения в формате, который не является допустимым читаемым текстом, но позволяет точно воссоздать исходные двоичные данные при кодировании обратно в байты.

...