Как мне кодировать двоичный двоичный объект как двоичный объект Unicode? - PullRequest
3 голосов
/ 16 сентября 2010

Я пытаюсь сохранить сериализованный объект Gzip в «Атрибут расширения Active Directory», дополнительная информация здесь . Это поле является строкой Unicode в соответствии с синтаксисом oM из 64.

Каков наиболее эффективный способ хранения двоичного двоичного объекта в формате Unicode? Как только я получу это, остальное - кусок пирога.

Ответы [ 2 ]

4 голосов
/ 16 сентября 2010

Есть, конечно, много способов надежной упаковки произвольного байтового массива в символы Юникода, но ни один из них не очень эффективен. очень жаль , что ActiveDirectory решил бы использовать Unicode для данных, которые не являются текстовыми по своему характеру. Это похоже на использование строки для представления 32-разрядного целого числа или на использование Nutella для написания любовного письма.

Я бы порекомендовал «быть осторожным» и использовать кодировку на основе ASCII, например base64. Я рекомендую это потому, что для этого уже есть встроенная реализация .NET:

var base64Encoded = Convert.ToBase64String(byteArray);

var original = Convert.FromBase64String(base64Encoded);

Теоретически вы можете придумать более эффективную кодировку, используя больше наборов символов Юникода. Однако для того, чтобы сделать это надежно , вам нужно немного узнать о Unicode.

1 голос
/ 16 сентября 2010

Обычно это способ конвертации байтов в текст Unicode:

// string from bytes
System.Text.Encoding.Unicode.GetString(bytes);

// bytes from string
System.Text.Encoding.Unicode.GetBytes(bytes);

EDIT
Но так как не каждая возможная последовательность байтов является допустимой строкой Unicode, вам следует использовать метод, который может создать строку из произвольной последовательности байтов:

// string from bytes
Convert.ToBase64String(byteArray);

// bytes from string
Convert.FromBase64String(base64Encoded);

(Спасибо @ Timwi , который указал на это!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...