Среди всех доступных здесь кодировок http://docs.python.org/library/codecs.html какой из них я должен использовать для декодирования двоичных данных в юникоде, если он не будет поврежден, когда я закодирую его обратно в строку?
Я использовал raw_unicode_data, и он не работает.
Пример: я загружаю изображение в POST (но не как вложение файла). Django преобразует данные POST в unicode с помощью utf-8. Однако при преобразовании из Unicode в строку (снова используя utf-8) данные становятся поврежденными. Я использовал raw_unicode_data, и то же самое произошло (хотя на этот раз всего несколько байтов). Какую кодировку следует использовать так, чтобы шаги декодирования и кодирования не искажали данные.
"Двоичные данные" не являются текстом, поэтому преобразование его в unicode
бессмысленно. Если есть текст, встроенный в двоичные данные, сначала извлеките его и декодируйте, используя кодировку, указанную в спецификации для формата данных.
bytes
из которых можно декодировать Unicode.
Если вы хотите опубликовать двоичные данные, используйте кодировку base64.
Как уже говорили другие, ваш вопрос не особенно ясен. Если вы хотите вогнать двоичные данные через текстовый канал (например, POST), то base64
- правильный формат, который следует использовать с соответствующими операциями преобразования данных в клиенте и на сервере (двоичные данные → текст base64 → передать текстовый канал → base64 text → двоичные данные).
В качестве альтернативы, если вы хотите переносить неправильно закодированный текст (например, как Python 3 пытается сделать для некоторых интерфейсов, таких как пути к файлам и переменные среды), то Python 3.1 и более поздние версии предоставляют обработчик ошибок surrogatescape
, который преобразует недопустимые значения в формате, который не является допустимым читаемым текстом, но позволяет корректно воссоздавать исходные двоичные данные при кодировании обратно в байты.