zoukankan      html  css  js  c++  java
  • java编码解码乱码问题

    服务器设值(中文)到界面使用了两次编码:

    1 String pageJson=URLEncoder.encode(URLEncoder.encode(str,"GBK"), "GBK");
    2 request.setAttribute("pageJson",pageJson);

    然后在界面又接收到的值传到后台,用的是地址栏直接url:

    window.location.href="...test.do?method=test&pageJson=${pageJson}";

    在后台直接解码:

    String pageJson=URLDecoder.decode(request.getParameter("pageJson"),"GBK");

    此时解码出来的值是乱码的,页面设置的编码格式也是GBK,并且没解码之前直接获取参数的值也是乱码的(其实无需解码了)。

    应该是传到服务器的时候浏览器自动解码了。

    故加上:

    String pageJson=new String(pageJson.getBytes("ISO-8859-1"), "GBK");

    就解决了。其实就是页面上虽然是编码后的格式,但是是通过 window.location.href 这样的方式请求到后台的,所以浏览器自动解码,跟平常一般url参数提交到后台是一样的,一般请求默认的编码格式是ISO-8859-1,和页面设置的格式无关,正常格式转换即可。

    如果这样这样还是乱码问题,检查下服务器的配置文件是否也设置了编码格式,去掉即可。

    如果是tomcat,检查server.xml配置文件,里面是否有设置编码格式。

    <Connector port="8080" protocol="HTTP/1.1"   
               connectionTimeout="20000"   
               redirectPort="8443"   
        useBodyEncodingForURI="true"  
        URIEncoding="utf-8"/> 

    这里的URLEncoding 是对get请求生效的,设置get请求的编码格式是utf-8,所以导致乱码,去掉或者改为gbk即可。

  • 相关阅读:
    事件总线2
    微信小程序视频录制教程
    vue插件开发-toast
    云计算中的测试,可从哪些维度入手
    ES配置及FAQ
    Azkaban安装及问题
    python 反编译 compileall
    平凡利用redis进行数据读写的一种优化
    彻底弄懂Redis的内存淘汰策略
    c# 判断年龄精确到日
  • 原文地址:https://www.cnblogs.com/suiyueqiannian/p/4915067.html
Copyright © 2011-2022 走看看