簡體   English   中英

如何將二進制blob編碼為Unicode blob?

[英]How do I encode a Binary blob as Unicode blob?

我正在嘗試將Gzip序列化對象存儲到Active Directory的“擴展屬性”中, 這里有更多信息。 根據它的oM語法 64,該字段是一個Unicode字符串。

將二進制blob存儲為Unicode的最有效方法是什么? 一旦我把它弄下來,剩下的就是小菜一碟。

當然,有許多方法可以將任意字節數組可靠地打包成Unicode字符,但它們都不是非常有效。 非常不幸的是,ActiveDirectory會選擇將Unicode用於本質上不是文本的數據。 這就像使用字符串來表示32位整數,或者像使用Nutella來寫一封情書一樣。

我的建議是“安全地玩”並使用基於ASCII的編碼,例如base64 我推薦這個的原因是因為已經有一個內置的.NET實現:

var base64Encoded = Convert.ToBase64String(byteArray);

var original = Convert.FromBase64String(base64Encoded);

從理論上講,你可以通過使用更多的Unicode字符集來提出比這更有效的編碼。 但是,為了可靠地執行此操作,您需要了解有關Unicode的相關信息。

通常,這將是在字節和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指出了這一點!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM