簡體   English   中英

.net字符串中如何存儲base64編碼的數據?

[英]How is base64 encoded data stored in .Net strings?

一個非常基本的問題,可能是一個非常基本的答案,我只是無法解決。

在.Net中,如果我使用base64對byte []進行編碼,則會得到一個字符串引用作為回報。 但是.Net中的字符串是UTF-16編碼的。 那么它實際存儲/表示的准確程度是多少?

但是.Net中的字符串是UTF-16編碼的。 那么它實際存儲/表示的准確程度是多少?

您已經回答了自己的問題:由於.NET中的字符串存儲為UTF16,因此正是 base64文本的存儲/表示方式。

將二進制數據編碼為base64只是將一個表示問題換成另一個表示問題:直接的二進制數據被分解為6位值的流,這些流又由一組64個不同的字符表示。 現在,數據已由字符表示,您需要確定如何表示字符

但是在內存中,.NET使用UTF16。 因此已經為您做出決定:base64字符串值的字符使用UTF16表示。


現在,如果要保存這些字符,或者通過網絡發送它們,或者以其他方式讓它們離開.NET環境,則必須重新編碼它們以適合您的需求。 至少,即使您只是以UTF16格式發送它們,.NET也會(禁止不安全的代碼)要求您將它們通過某個對象(例如StreamWriterEncoding等)傳遞,該對象會將.NET字符串轉換為必要的字節,當然,如果您需要其他編碼形式的文本,則也必須指定該字節(例如,使用適當的Encoding對象)。


例如,假設我有一個字符串"Hello"並且我想將其編碼為base64(只是忽略一下,如果我真的只有文本數據,則直接將其編碼為字符串:))。 我需要做的第一件事是決定對原始字符串使用哪種文本編碼,因為base64僅編碼二進制數據。 我選擇ASCII: Encoding.ASCII.GetBytes("Hello")產生數組{ 72, 101, 108, 108, 111 }

現在,我有了一個字節數組,可以將其編碼為base64: Convert.ToBase64String(new byte[] { 72, 101, 108, 108, 111 }) "SGVsbG8=" Convert.ToBase64String(new byte[] { 72, 101, 108, 108, 111 })產生字符串值"SGVsbG8=" (表示為C#文字) …當然,雙引號是文字語法的一部分,而不是字符串本身)。

因此,您的問題歸結為,該字符串如何在內存中表示? 就像您期望的那樣,它表示為UTF16。 看起來像這樣的字節數組:

{ 83, 0, 71, 0, 86, 0, 115, 0, 98, 0, 71, 0, 56, 0, 61, 0 };

這就是使用.NET字符串值在內存中存儲/表示的字符串"Hello" (先編碼為ASCII,然后再編碼為base64)的方式。 那是數字字節值,代表字符串文字"SGVsbG8="是UTF16編碼的文本。

暫無
暫無

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

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