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

相关文章
相关标签/搜索