• 【乱码】Request QueryString 编码,传值乱码的几种情况和解决办法(单页,多页)


    自己的项目还好,合作接口神马的传值乱码是很常见的。

    遇到了几次这种恶心情况,积累了一点经验,有不对的地方欢迎指正。

    乱码原因:

    一般来说,常用的编码不是utf-8就是gb2312,一样的 HttpUtility.URLEncode("北京"),

    gb2312编出来是这样:%B1%B1%BE%A9

    utf-8编出来是这样:%E5%8C%97%E4%BA%AC

    所以他们格式不一样的解码必然导致乱码,

    别说是页面间传值了,就算是var str= Server.UrlDecode(Server.UrlEncode("北京")); 这样也有可能出现乱码。WHY?

    1.Request.QueryString[key]、Request.Form[key]、Server.UrlDecode(),解码方式获取是一致的,都是优先从HTTP请求头(x-up-devcap-post-charset或者charset)获取编码,如果没指定的话从取配置文件的Globalization结点获取,都没有默认Encoding.UTF8。

    2.Request.QueryString[key]、Request.Form[key]默认都会调用函数HttpUtility.UrlDecode(str, encoding),如果HTTP请求的数据只经过一次编码,无需再调用解码函数;Request.Cookies[key]没用调用解码函数,获取到值后需要调用正确的解码函数才能得到正确的值。

    3.Server.UrlEncode()解码方式,优先从取配置文件的Globalization结点获取,如果配置文件没有的话用Encoding.Default,最后默认用Encoding.UTF8。

    解决办法:

    确认请求方和接收方的编码格式一致。

    只要接收方和请求方的编码格式一样就可以。

    在web.config里 <configuration>标签中的<system.web>里,指定:requestEncoding

    整个项目的指定:

     <system.web>
          <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" fileEncoding="utf-8" />
    
     </system.web>


    单个页面的指定:

    < location path="bu.aspx">   
    <!--
                path是页面路径
     -->
    < system.web> < globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8"/> < /system.web> < /location>


    诊断依据:

    引起乱码原因很多,不是所有情况都需要修改配置文件,那什么时候需要修改web.config呢?

    以“北京”的gb2312编码为例

    比如:   传来的Querystring是 city=%B1%B1%BE%A9 

        页面接收的 Querystring["city"] 也是 %B1%B1%BE%A9 

        那很可能是Decode解码的问题,无需改web.config。

    比如: 传来的Querystring是 city=%B1%B1%BE%A9 

        页面收到的 Querystring["city"] 却变成 %u92BD%u9D95%u7306(类似这种,这只是例子)

        明显编码就不一样了好伐!这种收到时候未经处理(指自己手动处理)编码改变的情况,一般需要修改web.config设置。

    参考:Request 接收参数乱码原理解析一:服务器端解码原理

  • 相关阅读:
    Javascript面向对象编程--原型字面量
    Javascript面向对象编程--原型(prototype)
    Javascript面向对象编程--封装
    java word操作
    uniapp获取mac地址,ip地址,验证设备是否合法
    element-ui+vue表单清空的问题
    mysql,oracle查询当天的数据
    vue+element在el-table-column中写v-if
    idea修改页面不用重启项目(转)
    vue+element实现表格v-if判断(转)
  • 原文地址:https://www.cnblogs.com/hydor/p/3664588.html
Copyright © 2020-2023  润新知