C# 里面的编码问题

来源:互联网 发布:linux进程启动过程 编辑:程序博客网 时间:2024/04/29 19:51

 

1  .NET中的String只有Unicode一种。所以编码格式的字节序列转换成String时最终都是以Unicode表示。

2 System.Text.Encoding.Default是取系统的当前ANSI代码页的编码,即当前系统的编码。(在我们的机子上一般都是"gb2312")这就每次用Default读取文件流都正确,且必须用Default读取才正确的原因----其实用Encoding.GetEncoding("GB2312")也一样。  

3  String-->byte[](Unicode-->other) 
//string 转成default编码的byte[],编码采用default,我们机器上大部分为gb2312
string a="china中文乱码";
byte[]   abyte   =   System.Text.Encoding.Default.GetBytes(a);   

byte[]-->String(other-->Unicode)
string b = null;
byte[] bbyte = null;
bbyte 
= new byte[100];
PrintStr(abyte,bbyte); 
//得到byte[]
//System.Text.Encoding     ed=   System.Text.Encoding.GetEncoding("GB2312"); 
System.Text.Encoding     ed=  System.Text.Encoding.Default; //编码,和用gb2312一样
b  =   ed.GetString(bbyte); //取得正确编码后的string
StreamReader(string  path, System.Text.Encoding  encoding]),Response.Charset,这就相当于你告诉系统byte[]是什么编码,这时候.NET用你指定的编码方式去解码,然后转换成Unicode编码方式的String.  
也就是说,不管何时,我们所指定的编码都只是指byte[]。  
即Encoding.UTF8.GetString(byte[]   buffer)是告诉系统buffer的编码是UTF8。
byte[]   buf =  Encoding.UTF8.GetBytes(string str)是告诉系统返回的buf编码方式是UTF8。  
字节序是按指定编码方式编码,它有一个特定的编码方式,但它本身是中性的,不含有任何编码信息。