ASPNET的乱码

ASPNET的乱码
1 编码的知识
  ASCII:只支持英文."123"=对应的编码:31 32  33
  ANSI: 每个国家都有自己的编码,例如:GB2312,JIS . "中文123"=D6D0 CEC4 31 32 33
  UNICODE:把世界所有的语言用一种编码表示. "中文123"=2D4E 8765 3100 3200 3300
2 乱码产生的原因
   1)非Unicode程序之间的移植
   2)网页提交的字符串 ,"中" 提交 "%D6%D0"
   3)从数据库提取
   4) 电子邮件中
   主要的原则就是机器之间使用不同编码格式,可以在页面设置编码格式,也可以在配置文件里面设置全局的编码格式
3 测试编码的长度
  //str="中文123"
  private void TestLength(string str)
  {
    Console.WriteLine(str.Length);//结果为5
    //字符串和字节串之间的转换
    Encoding gb=Encoding.GetEncoding("gb2312");
    char[] chars=gb.GetBytes(str);//从字节得到GB2312字符数组
    byte[] bytes=gb.GetBytes(str);
    str=gb.GetString(bytes);//从字节得到UNICODE字符串
    Console.WriteLine(chars);//结果为7
    Console.WriteLine(str);//结果为9
   
  } 
 4 模拟B/S乱码
   //str="中文123",默认的格式为UNICODE
   private void LM(string str)
   {
      Encoding client = Encoding.GetEncoding("gb2312");
      byte[] bytes=client.GetBytes(str);
      //正确
      Encoding serverok=Encoding.GetEncoding("gb2312");
      string strserver=serverok.GetString(bytes);
      Console.WriteLine(strserver);
      //错误
      strserver=Encoding.Unicode.GetString(bytes);
      Console.WriteLine(strserver);
     
   }
   5 编码之间的转换
     private string UTFtoGB2312(string utfinfo)
     {
       Encoding utf8=Encoding.UTF8;
       Encoding gb2312=Encoding.GetEncoding("gb2312");
       byte[] unicodebytes=utf8.GetBytes(utfinfo);
       byte[] asciibytes=Encoding.Convert(utf8,gb2312,unicodebytes);
       byte[] as asciichars=new char(gb2312.GetCharCount(asciibytes,0,acciibytes.Length));
       gb2312.GetChars(asciibytes,0,asciibytes.Length,asciichars,0);
       string gb2312info=new string(asciichars);
       return gb2312info;
     }
     6 产生随机汉字
       priavte  void GetHZRad()
       {
         Encoding gb2312=Encoding.GetEncoding("gb2312");//获得gb2312编码表
         //调用函数产生2个随机中文汉字的编码
         object[] bytes=CreateRegionCode(2);
         //更具汉字编码的字节数组解码出汉字
         string str1=gb2312.GetString((byte[])Convert.ChangeType(bytes[0],typeof(byte[])));
         string str2=gb2312.GetString((byte[])Convert.ChangeType(bytes[1],typeof(byte[])));
         string strkey=str1+str2;
         byte[] data=gb2312.GetBytes(strkey);
         Response.ContentEncoding=gb2312;//设置返回的格式
         Response.OutputStream.Write(data,0,data.Length);     
       } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值