代码页

  最近写一个网络程序时,碰到字符串和字节数组之间的转换问题,开始时还比较简单,字符串都是标准的Ascll编码,处理起来比较简单:
  字符串转字节数组 byte [] bts=Encoding.ASCII.GetBytes(str);
  字节数组转字符串 string str=Encoding.ASCII.GetString(bts);
  但是后来发送的数据不仅仅是Ascii码了,而是连普通字节都有,这种情况下,就比较麻烦了,因为ASCII代码页(这还是后来才学到的)只支持7个位,也就是说,高位为1的话,全部被转化为63,显示为?。逆向转换就不行了。
  在网上学习,知道了其实编码规则是由许多的代码页决定的,但vs2005帮助里只提到几种编码:utf-8,utf-7,unicode等,基本都是多字节的。
  我希望的,还是单字节的代码页,能够支持全字节的转换的,127之上的字节,显示为乱码也无所谓。
  关于代码页,http://amoderlan.blogbus.com/logs/4860636.html 比较靠谱,其他还有一些,列的东西到多,但是很多都是空的,难于检查。
  为了得到我想要的东西,写了一小段程序,检查各个代码页的效果。
             byte [] bys = new   byte [ 4 ];
            bys[
0 =   56 ;
            bys[
1 =   156 ;
            bys[
2 =   156 ;
            bys[
3 =   56 ;

            
byte [] b2  =   new   byte [ 4 ];
            
            Encoding en 
=   Encoding.GetEncoding( 20127 );
            
string  ret  =   "" ;
            ret 
+=   " 编码名称: "   +  en.EncodingName  +  Environment.NewLine;
            ret 
+=   " 编码代码: "   +  en.CodePage.ToString()  +  Environment.NewLine; ;
            ret 
+=   " 是否单字节: "   +  en.IsSingleByte.ToString()  +  Environment.NewLine;
            ret 
+=   " 字符串长度: "   +  en.GetString(bys).Length.ToString()  +  Environment.NewLine;
            ret 
+=   " 内容: "   +  en.GetString(bys)  +  Environment.NewLine;
            b2 
=  en.GetBytes(en.GetString(bys));
            
string  dc = " 成功 " ;
            
for  ( int  i  =   0 ; i  <  bys.Length; i ++ )
            
{
                
if (bys[i] != b2[i]) dc = "失败";
            }

            ret 
+=   " 两次转换能否还原: "   +  dc + Environment.NewLine;
            textBox1.Text 
=  ret;

  得到了我想要的东西:

编码名称:US-ASCII
编码代码:20127
是否单字节:True
字符串长度:4
内容:8??8
两次转换能否还原:失败


编码名称:IBM EBCDIC (美国-加拿大)
编码代码:37
是否单字节:True
字符串长度:4
内容:˜ææ˜
两次转换能否还原:成功

编码名称:OEM 美国
编码代码:437
是否单字节:True
字符串长度:4
内容:8££8
两次转换能否还原:成功

编码名称:IBM EBCDIC (国际)
编码代码:500
是否单字节:True
字符串长度:4
内容:˜ææ˜
两次转换能否还原:成功

编码名称:阿拉伯字符(ASMO-708)
编码代码:708
是否单字节:True
字符串长度:4
内容:8œœ8
两次转换能否还原:成功

编码名称:阿拉伯字符(DOS)
编码代码:720
是否单字节:True
字符串长度:4
内容:8££8
两次转换能否还原:成功

编码名称:希腊字符(DOS)
编码代码:737
是否单字节:True
字符串长度:4
内容:8εε8
两次转换能否还原:成功

编码名称:OEM 西里尔语
编码代码:855
是否单字节:True
字符串长度:4
内容:8юю8
两次转换能否还原:成功


有兴趣还可以检查其他的代码页,这是源代码:
http://files.cnblogs.com/jetz/WindowsApplication1.rar

你可能感兴趣的:(代码)