C# 字符編碼解碼 Encoder 和Decoder

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

這時候使用Encoding的GetBytes方法處理較爲麻煩,咱們直接使用Encoder處理。網絡

Encoder能夠將一組字符編碼爲一個字節序列。而Decoder能夠將已編碼的字節序列解碼爲字符序列。app

 

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

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

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

例如,一個數據塊的末尾可能不匹配的高代理項,而且匹配的低代理項可能在下一個數據塊中。 所以, GetDecoderGetEncoder 在網絡傳輸和文件操做頗有用,由於這些操做一般處理的數據而不是完整的數據流塊。3d

 

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

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

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

所以, 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

相關文章
相關標籤/搜索