Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 602|回复: 0

解决html向aspx页面传值汉字乱码问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-8-27 13:29:46 | 显示全部楼层 |阅读模式
     
    项目遇到了下面的问题:

    搜索引擎页面     首页为html, 页面有个站内搜索功能,通过提交表单方式传参到.aspx页面。起初不做任何操作,aspx搜索结果页面显示乱码。    原因:html采用的是Gb2312  而aspx页面默认是utf编码,显然会乱码。

    正常情况下   URL 编码格式,如 字:
    GB2312
    编码: BABA URL 格式: %BA%BA
    UTF-
    8  编码: E6B189 URL 格式: %E6%B1% 89

    1.起初我是在Page_Load里这样操作:
          Encoding gb2312 = Encoding.GetEncoding("gb2312");
          Response.ContentEncoding = gb2312;
    aspx页面的编码格式改为:<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
     
    出现的情况是,页面上的汉字竟然都成了口口口。



    2.之后网上再找了些资料,通过这种方式转化编码。
            byte[] barr = System.Text.Encoding.UTF8.GetBytes(Key);
            Key = System.Text.Encoding.GetEncoding("gb2312").GetString(barr);
    结果有些汉字可以转化过来,但大多汉字会变成:“锟斤拷”    经典乱码。
    原因:
           Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACTER
    那么U+FFFD的UTF-8编码出来,恰好是 '\xef\xbf\xbd'。
    如果这个'\xef\xbf\xbd',重复多次,例如 '\xef\xbf\xbd\xef\xbf\xbd',然后放到GBK/CP936/GB2312/GB18030的环境中显示的话
    一个汉字2个字节,最终的结果就是:锟斤拷 哈哈。。。
    此方法还是不行。

    3.无奈只能修改  web.config,  因为该文件的重要性,对其他文件也会有很大的影响,我一般很少去动,尽量在自己的页面完成,但这次看来是不行了。

    web.config
    文件  

     <globalization requestEncoding=
    "utf-8"  responseEncoding= "utf-8"  fileEncoding= "utf-8" />

    改为

     <globalization requestEncoding=
    "gb2312"  responseEncoding= "gb2312"  fileEncoding= "utf-8" />


    结果汉字传参过来正确编码,没了乱码。  经过全站一番测试,问题严重了,后台很多文件都乱码了。看来web.config文件还是不要去改,小题大作。

    4.最后通过解析地址栏编码,我接受参数的时候只要 
           System.Collections.Specialized.NameValueCollection nv = System.Web.HttpUtility.ParseQueryString(Request.Url.Query, System.Text.Encoding.GetEncoding("GB2312"));
      汉字就不会乱码了。
        可是要注意的是提交表单的方法一定要是Get方式,Post方式接收不到值。

    我解决问题的步骤如下,也包括不成功的步骤

    1.html页面:
        <form name="Search" action="Search.aspx"  method="get">
      <tr>
        <td height="41"><img src="img/Inf_-_01.gif" width="394" height="41" /></td>
        <td><img src="img/Inf_-_02.gif" width="50" height="41" /></td>
        <td background="img/Inf_-_03.gif" width="22"></td>
        <td width="140" align="left" valign="bottom" background="img/Inf_-_04.gif"><label>
       
        <span class="STYLE10">站内搜索:</span></label><input name="WordKey" type="text" id="WordKey" size="40"></td>
       
        <td width="71" valign="bottom" style="background:url(img/Inf_-_050.gif) repeat-x"><input type="image" style="width:71; height:21;" src="img/Inf__05.gif" onclick="Search();"></td>
        <td><img src="img/Inf_-_06.gif" width="50" height="41" /></td>
        <td width="127" align="center" valign="bottom" style="background:url(img/Inf_-_070.gif) repeat-x"><span class="STYLE10"><script type="text/javascript">writeDateInfo();</script></span></td>
      </tr>
      </form>


    2 . aspx页面 引入命名空间

    using  System.Text;
    using  System.Collections.Specialized;

        string CurrentStr = Request.Url.Query;
                 System.Collections.Specialized.NameValueCollection nv = System.Web.HttpUtility.ParseQueryString(CurrentStr, System.Text.Encoding.GetEncoding("GB2312"));
                 string Key = nv["WordKey"];

     3.搞定。哈哈

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-29 14:18 , Processed in 0.067260 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表