首先贴几个MSDN上的方法:
//编码的一些方法
//1、获取Encoder的实例:
Encoder code1 = Encoding.ASCII.GetEncoder();// ASCII的编码实例
Encoder code2 = Encoding.Unicode.GetEncoder();// Unicode
//2、一些方法:
public virtual int GetBytes(
char[] chars, //要编码的字符数组
charIndex,//第一个要编码的字符索引,一般从0开始
int charCount,//字符数目,字符数组的长度
byte[] bytes,//存储编码后的字节序列,这里一般是字节数组
int byteIndex,//开始写入所产生的的字节数组的索引位置
bool flush //如果为false,则编码器会将数据末尾的尾部字节存储在内部缓冲区内,为下次编码操作使用这个字节做准备。
)
public abstract int GetByteCount(
char[] chars,//要编码的字符数组
int Index,//第一个要编码的字符索引,一般从0开始
int count,//字符数目,字符数组的长度
bool flush//如果为false,则编码器会将数据末尾的尾部字节存储在内部缓冲区内,为下次编码操作使用这个字节做准备。
)
public abstract int GetChars(
byte[] bytes,//要解码的字节数组
int byteIndex,//需要开始解码的自己数组位置索引
int Bytecount,//字节数组长度
char[] chars,//存储字符的数组
int charIndex//开始写入字符的位置索引
)
public virtual int GetCharCount(
byte[] bytes, 包含要解码的字节序列的字节数组。
int index, 第一个要解码的字节的索引。
int count,要解码的字节数。
bool flush)若要在计算后模拟清除解码器的内部状态,则为 true;否则为 false。
后面举一个简单的例子来说明这些方法:
static void Main(string[] args)
{
string text = "UIDFsdiwdf太阳";
Console.WriteLine("原字符串是:{0}", text);
Console.WriteLine("开始进行编码。");
//编码
Encoding coding = Encoding.UTF8;
char[] chartext = text.ToCharArray();
//计算编码后的字节数组长度
//这里第四个参数是原字符串的长度
int lengthbyte = coding.GetEncoder().GetByteCount(chartext, 0, chartext.Length, false);
byte[] result = new byte[lengthbyte];
coding.GetEncoder().GetBytes(chartext, 0, chartext.Length, result, 0, false);
Console.WriteLine("编码后的字节是:");
//输出编码后的字节
foreach (byte b in result)
{
Console.Write("{0}-", b);
}
//解码
Console.WriteLine("开始进行解码。");
int lengthstr = coding.GetDecoder().GetCharCount(result, 0, result.Length, false);
char[] charstr = new char[lengthstr];
coding.GetDecoder().GetChars(result, 0, result.Length, charstr, 0);
Console.WriteLine("解码后的字符串是:");
foreach (char c in charstr)
{
Console.Write(c);
}
Console.ReadLine();
}
输出结果: