如何将二进制blob编码为Unicode blob?

时间:2010-09-15 23:07:01

标签: c# .net unicode encoding utf-8

我正在尝试将Gzip序列化对象存储到Active Directory的“扩展属性”中,更多信息here。该字段是一个Unicode字符串,根据它的oM syntax为64。

将二进制blob存储为Unicode的最有效方法是什么?一旦我把它弄下来,剩下的就是小菜一碟。

2 个答案:

答案 0 :(得分:4)

当然,有许多方法可以将任意字节数组可靠地打包成Unicode字符,但它们都不是非常有效。 非常不幸,ActiveDirectory会选择将Unicode用于本质上不是文本的数据。这就像使用字符串来表示32位整数,或者像使用Nutella来写一封情书一样。

我的建议是“安全地播放”并使用基于ASCII的编码,例如base64。我推荐这个的原因是因为已经有一个内置的.NET实现:

var base64Encoded = Convert.ToBase64String(byteArray);

var original = Convert.FromBase64String(base64Encoded);

理论上,你可以通过使用更多的Unicode字符集来提出比这更有效的编码。但是,为了实现可靠,您需要了解相关的Unicode。

答案 1 :(得分:1)

通常,这将是在字节和Unicode文本之间进行转换的方法:

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

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

修改
但由于并非每个可能的字节序列都是有效的Unicode字符串,因此您应该使用可以从任意字节序列创建字符串的方法:

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

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

(感谢 @Timwi 指出了这一点!)