zoukankan      html  css  js  c++  java
  • 简单整理编码问题

    URL中的参数(get请求,但不限于get请求,post也可以传递URL参数)

    URL中的参数,在解析URL时getParameter对请求参数,自动默认按照iso8859-1 解码,可以修改tomcat配置,使其默认按照utf-8解码,tomcat 8.0 以上默认编码方式是utf-8,所以后面修改request.setCharacterEncoding不会起作用,因为已经得到了参数值。

    非URL中的参数(即请求体中的参数)

    非URL中的参数,即请求体中的参数(post请求)

    对于表单:

    表单提交时,浏览器会检查参数是否是合法的ascii字符,
    如果不是(比如中文),浏览器会按照打开表单所在的页面时的
    字符集来编码(比如,按照"utf-8"来编码)。
    服务器在默认情况下,会按照"iso-8859-1"来解码。
    如何解决?
             Step1,要保证表单提交时,浏览器会按照事先设定的字符集来编码:
                 <meta http-equiv="content-type"
                     content="text/html;charset=utf-8">
             Step2,服务器端按照对应的字符集去解码。
             服务端解码两种解决方法:
                 方式一:
                     request.setCharacterEncoding("utf-8");
                     注:要添加到request.getParameter方法的前面
                          只针对post请求有效
                 方式二:
                     uname=new String(uname.getBytes("iso-8859-1"),"utf-8");

    对于ajax:

    1.post请求
             1)为什么会有乱码?
             浏览器提供的ajax对象,在发送post请求时,会将中文参数值按照“utf-8”来进行编码。
             服务器默认会使用“iso-8859-1”解码。
             
             2)如何解决?
                 request.setCharacterEncoding("utf-8");
                 这只能用于post请求
    2)get请求 (这个是属于URL中参数)
             1)为什么会有乱码?
                 ie浏览器提供的ajax对象,会对中文参数使用“gbk”来编码,而其它浏览器使用"utf-8"来编码。
                 而服务器端默认会使用“iso-8859-1”解码。
             2)如何解决?
                 Step1,服务器使用"utf-8"来解码。
                     可以修改tomcat/conf/servlet.xml
                     <Connector URIEncoding="utf-8">
                     (就是在tomcat的servlet.xml配置文件中,找到Connector标签,加上
                     URIEncoding属性,并把值设置为utf-8;这方法只对浏览器地址栏的参
                     数编码有效。即只对URL参数有效)
     
                 Step2,使用encodeURI函数对请求参数进行统一编码。
                 注:这个encodeURI函数是javascript内置的函数(类似alert),会对请求地址中的中文
                 参数值使用"utf-8"来编码。

     远程访问接口中的编码问题

    在做远程访问接口时,如果是URL中的参数,不管是中文,还是已经编码过的字符串,getParameter
    都会自动解码;如果是请求体中的参数,是中文,发送的过程中浏览器会编码,这时候后台getParameter会进行解码,如果是已经编码过
    的字符串,则后台不会进行解码,会直接得到该编码过的字符串,手动进行解码即可;(一般在做接口开发时,才会发送编码过的字符串)
     
     
  • 相关阅读:
    通过 VB5 创建 ActiveX DLL 文件并用 ASP 调用一例
    Autocad VBA初级教程
    自学资料第一集
    Linux虚拟化:10个不得不爱的理由
    EXCEL VBA编程的一些小结
    FAQ 工作薄及工作表
    很重要的EXCEL使用技巧
    Excel VBA编程的常用代码
    VBA生成一个CorelDraw工具栏
    支付宝,网银在线,快钱 3大支付接口的集成与对比,统合实现
  • 原文地址:https://www.cnblogs.com/cainiao-Shun666/p/9186252.html
Copyright © 2011-2022 走看看