C# 字符編碼解碼 Encoder 和Decoder


在網絡傳輸和文件操作中,如果數據量很大,需要將其划分為較小的快,此時可能出現一個數據塊的末尾是一個不匹配的高代理項,而與其匹配的低代理項在下一個數據塊。

這時候使用Encoding的GetBytes方法處理較為麻煩,我們直接使用Encoder處理。

Encoder可以將一組字符編碼為一個字節序列。而Decoder可以將已編碼的字節序列解碼為字符序列。

 

若要獲取的實現的實例 Encoder 類,應用程序應使用 GetEncoder 方法 Encoding 實現。

GetByteCount 方法確定多少個字節進行編碼的一組 Unicode 字符和 GetBytes 方法執行實際的編碼。 這兩種方法的幾個版本中有 Encoder 類。 有關詳細信息,請參閱Encoding.GetBytes

一個 Encoder 對象之間維護狀態信息對連續調用 GetBytesConvert 方法,以便它可以正確編碼字符跨塊的序列。 Encoder 還保留尾隨字符數據塊的末尾,並在下一步編碼操作中使用尾隨字符。

例如,一個數據塊的末尾可能不匹配的高代理項,並且匹配的低代理項可能在下一個數據塊中。 因此, GetDecoderGetEncoder 在網絡傳輸和文件操作很有用,因為這些操作通常處理的數據而不是完整的數據流塊。

 

若要獲取的實現的實例 Decoder 類,應用程序應使用 GetDecoder 方法 Encoding 實現。

GetCharCount 方法確定有多少個字符導致個字節的序列進行解碼和 GetChars 方法執行實際的解碼。 這兩種方法的幾個版本中有 Decoder 類。 有關詳細信息,請參閱Encoding.GetChars

一個 Decoder 對象之間維護狀態信息對連續調用 GetCharsConvert 方法,因此它可以正確地對跨塊的字節序列進行解碼。 Decoder 還保留在數據塊的末尾的尾部字節,並在下一步的解碼操作中使用的尾隨字節。

因此, GetDecoderGetEncoder 非常有用的網絡傳輸和文件操作,因為這些操作通常處理的數據而不是完整的數據流塊。

 

 1         string str = "在下坂本,有何貴干@@";
 2         Char[] chars = str.ToCharArray();
 3         Debug.Log("String="+new string(chars));
 4         //獲得Encoder實例;
 5         Encoder encoder  = Encoding.UTF8.GetEncoder();
 6         //計算字符序列化需要的字節數組長度;
 7         byte[] bytes = new byte[encoder.GetByteCount(chars,0,chars.Length,true)];
 8         //通過GetBytes轉為字節序列;
 9         encoder.GetBytes(chars, 0, chars.Length, bytes, 0, true);
10         Debug.Log(BitConverter.ToString(bytes));
11         Debug.Log("Encoding.UTF8.GetString=" + Encoding.UTF8.GetString(bytes));
12         //獲得Decoder實例;
13         Decoder decoder = Encoding.UTF8.GetDecoder();
14         //計算字節數組對應的字符數組長度;
15         int charSize = decoder.GetCharCount(bytes, 0, bytes.Length);
16         Char[] chs = new char[charSize];
17         //進行字符轉換;
18         int charLength = decoder.GetChars(bytes, 0, bytes.Length, chs, 0);
19         Debug.Log("Decoder Bytes to String =" + new string(chs));

 

 

//output:

 

 

MSDN Encoder >>>  https://msdn.microsoft.com/zh-cn/library/system.text.encoder%28v=vs.110%29.aspx

MSDN Decoder >>> https://msdn.microsoft.com/zh-cn/library/system.text.decoder%28v=vs.110%29.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM