压缩二进制数据,编码和转换为字符串的最佳顺序是什么?

时间:2010-09-15 23:42:41

标签: c# unicode ado.net active-directory directoryservices

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

我将二进制对象保存为AD的Unicode格式,如下所示:

byte[] bytes = ... // This is my blob 
System.Text.Encoding.Unicode.GetString(bytes); 

然后我将其保存到扩展属性#14。问题在于,当我读取值时,我没有得到整个字符串。

以下是实际保存到服务器的屏幕截图: alt text

以下是回来的截图: alt text

我猜测\ 0引起了问题,这可能意味着null。我该怎么处理?除了null之外还有其他字符我还应该逃避吗?

1 个答案:

答案 0 :(得分:2)

我假设您正在尝试将二进制数据放入字符串字段中。

简单地将数据从二进制转换为Unicode是一个坏主意(其中一个是您遇到的原因,但Null(0)不是Unicode字符串编码中唯一可能导致问题的点。还有其他控制字符,您可能有字节对指向以Unicode等格式保留的字符。)

我建议考虑使用Base64。它是为这个目的而设计的。虽然这可能会阻碍您使用gzip进行压缩工作,但它应该可以解决您的问题。

您的代码将改为:

byte[] bytes = ... // This is my blob 
System.Convert.ToBase64String(bytes); 

然后使用:

System.Convert.ToBase64String(string); 

以数字形式恢复数据。

这绝对是一种比你正在做的更安全的方法。