我正在尝试将一个gzip压缩二进制序列化对象存储到Active Directory的“扩展属性”中,更多信息here。该字段是一个Unicode字符串,根据它的oM syntax为64。
我将二进制对象保存为AD的Unicode格式,如下所示:
byte[] bytes = ... // This is my blob
System.Text.Encoding.Unicode.GetString(bytes);
然后我将其保存到扩展属性#14。问题在于,当我读取值时,我没有得到整个字符串。
以下是实际保存到服务器的屏幕截图:
以下是回来的截图:
我猜测\ 0引起了问题,这可能意味着null。我该怎么处理?除了null之外还有其他字符我还应该逃避吗?
答案 0 :(得分:2)
我假设您正在尝试将二进制数据放入字符串字段中。
简单地将数据从二进制转换为Unicode是一个坏主意(其中一个是您遇到的原因,但Null(0)不是Unicode字符串编码中唯一可能导致问题的点。还有其他控制字符,您可能有字节对指向以Unicode等格式保留的字符。)
我建议考虑使用Base64。它是为这个目的而设计的。虽然这可能会阻碍您使用gzip进行压缩工作,但它应该可以解决您的问题。
您的代码将改为:
byte[] bytes = ... // This is my blob
System.Convert.ToBase64String(bytes);
然后使用:
System.Convert.ToBase64String(string);
以数字形式恢复数据。
这绝对是一种比你正在做的更安全的方法。