C# 字符编码解码 Encoder 和Decoder
在网络传输和文件操作中,如果数据量很大,需要将其划分为较小的快,此时可能出现一个数据块的末尾是一个不匹配的高代理项,而与其匹配的低代理项在下一个数据块。
这时候使用Encoding的GetBytes方法处理较为麻烦,我们直接使用Encoder处理。
Encoder可以将一组字符编码为一个字节序列。而Decoder可以将已编码的字节序列解码为字符序列。
若要获取的实现的实例 Encoder 类,应用程序应使用 GetEncoder 方法 Encoding 实现。
GetByteCount 方法确定多少个字节进行编码的一组 Unicode 字符和 GetBytes 方法执行实际的编码。 这两种方法的几个版本中有 Encoder 类。 有关详细信息,请参阅Encoding.GetBytes。
一个 Encoder 对象之间维护状态信息对连续调用 GetBytes 或 Convert 方法,以便它可以正确编码字符跨块的序列。 Encoder 还保留尾随字符数据块的末尾,并在下一步编码操作中使用尾随字符。
例如,一个数据块的末尾可能不匹配的高代理项,并且匹配的低代理项可能在下一个数据块中。 因此, GetDecoder 和 GetEncoder 在网络传输和文件操作很有用,因为这些操作通常处理的数据而不是完整的数据流块。
若要获取的实现的实例 Decoder 类,应用程序应使用 GetDecoder 方法 Encoding 实现。
GetCharCount 方法确定有多少个字符导致个字节的序列进行解码和 GetChars 方法执行实际的解码。 这两种方法的几个版本中有 Decoder 类。 有关详细信息,请参阅Encoding.GetChars。
一个 Decoder 对象之间维护状态信息对连续调用 GetChars 或 Convert 方法,因此它可以正确地对跨块的字节序列进行解码。 Decoder 还保留在数据块的末尾的尾部字节,并在下一步的解码操作中使用的尾随字节。
因此, GetDecoder 和 GetEncoder 非常有用的网络传输和文件操作,因为这些操作通常处理的数据而不是完整的数据流块。
string str = "在下坂本,有何贵干@@";
Char[] chars = str.ToCharArray();
Debug.Log("String="+new string(chars));
//获得Encoder实例;
Encoder encoder = Encoding.UTF8.GetEncoder();
//计算字符序列化需要的字节数组长度;
byte[] bytes = new byte[encoder.GetByteCount(chars,,chars.Length,true)];
//通过GetBytes转为字节序列;
encoder.GetBytes(chars, , chars.Length, bytes, , true);
Debug.Log(BitConverter.ToString(bytes));
Debug.Log("Encoding.UTF8.GetString=" + Encoding.UTF8.GetString(bytes));
//获得Decoder实例;
Decoder decoder = Encoding.UTF8.GetDecoder();
//计算字节数组对应的字符数组长度;
int charSize = decoder.GetCharCount(bytes, , bytes.Length);
Char[] chs = new char[charSize];
//进行字符转换;
int charLength = decoder.GetChars(bytes, , bytes.Length, chs, );
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
C# 字符编码解码 Encoder 和Decoder的更多相关文章
- python基础3之文件操作、字符编码解码、函数介绍
内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: #/usr/bin/env ...
- python 3 字符编码解码问题
python2与python3 字符编码都做了很大的调整,区别: 1.python2字符串默认有两种类型,unicode和str.'你好' !=u'你好' python3字符串默认只有str一种类型, ...
- Python 初始—(字符编码解码)
字符编码之间的编码转换则需要通过Unicode 进行转换,那么需要一个编码和解码实现与Unicode进行关联转换 例如utf-8转gbk utf-8----decode----->Unicode ...
- 【转】python 字符编码与解码——unicode、str和中文:UnicodeDecodeError: 'ascii' codec can't decode
原文网址:http://blog.csdn.net/trochiluses/article/details/16825269 摘要:在进行python脚本的编写时,如果我们用python来处理网页数据 ...
- Python之字符编码与文件操作
目录 字符编码 Python2和Python3中字符串类型的差别 文件操作 文件操作的方式 文件内光标的移动 文件修改 字符编码 什么是字符编码? ''' 字符编码就是制定的一个将人类的语言的字符与二 ...
- 使用多字节字符集的跨平台(PC、Android、IOS、WP)编码/解码方法
随着移动端的发展,跨平台已成为通讯架构设计的重要考虑因素,PC.Android.IOS.WP等跨多平台间的数据通讯,必然要解决字符编码/解码的问题. 多字节字符集MBCS不是跨平台的首选字符集,面向跨 ...
- python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str
python_2.x_unicode_to_str.py a = u"中文字符"; a.encode("GBK"); #打印: '\xd6\xd0\xce\xc ...
- Java 字符编码(二)Java 中的编解码
Java 字符编码(二)Java 中的编解码 java.nio.charset 包中提供了一套处理字符编码的工具类,主要有 Charset.CharsetDecoder.CharsetEncoder. ...
- Java 字符编码(三)Reader 中的编解码
Java 字符编码(三)Reader 中的编解码 我们知道 BufferedReader 可以将字节流转化为字符流,那它是如何编解码的呢? try (BufferedReader reader = n ...
随机推荐
- java基本输入输出练习
java获取用户的输入分两种,一种是字符的输入,一种是整行的输入,要用到java.io包.对于字符输入来说,使用System.in方法可以输入字符:对于整行的输入,可以使用Scanner类的方法获取整 ...
- leetcode Pascal's triangle
#include <stdio.h> int** generate(int numRows, int** columnSizes) { if (numRows == 0) { column ...
- SSH:Struts2.2+Hibernate3.6+Spring3.1分页示例[转]
参考资料 1 ssh分页(多个例子) http://useryouyou.iteye.com/blog/593954 2 ssh2分页例子 http://459104018-qq-com.iteye. ...
- 远程线程DLL注入64位进程
int main() { BOOL bFlag = FALSE; char *szDllName = "MSGDLL.dll"; //bFlag = EnablePrivilege ...
- PHP分页代码
} <a href="fenye.php?page=<?php echo <?php } <a href="fenye ...
- Virtual Box 下Ubuntu桥接网络设置
转自:http://os.51cto.com/art/200908/144564.htm 一般而言,安装完VirtualBox设定网路时选择默认的NAT模式,Guest就可顺利联网了,但是这种方式比较 ...
- VS一次删除多个窗体后报错
今天在做项目的时候,需要删除多个窗体,删除了之后,VS报了个错误: 命名空间“项目名称”中不存在类型或命名空间名称“文件夹”(是否缺少程序集引用?) 具体原因不清楚,就算恢复窗体后还是一样的错误,无法 ...
- Python Day03
set Collections系列: Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几 ...
- 为Informix数据库开启事务
1.首先在Informix数据库安装根目录的etc文件夹下找到名为ONCONFIG.on_xxxx的配置文件: 2.打开ONCONFIG.on_xxxx文件,在第409行的位置找到TAPEDEV \\ ...
- java web学习之表单
前台页面与后台页面的数据又form表单完成. <form name ="form1" method="post" action="index ...