zoukankan      html  css  js  c++  java
  • Tomcat 处理请求时的中文乱码问题

    利用Tomcat8作为服务器,采用servlet接收前端请求后进行处理的过程中,前台请求中有中文时,中文信息变成了乱码。

    经过调试和查阅,发现Tomcat在处理get请求和post请求是有区别的。参照网上的各种说法,进行一下实验:

    jsp页面与后台采用的都是utf-8编码,所以只对utf-8的编码方式进行比较,对比的代码如下:

    String name=request.getParameter("username");
    String param=new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
    System.out.println(name+"  "+param);

    测试:
    1.chrome浏览器  post请求 请求编码未设置  
     前端jsp页面设定为utf-8编码,结果name为乱码  param可以正确解析。网上查到post请求tomcat的默认的编码方式是iso-8859-1所以会出现如上结果

    2.ie浏览器   post请求  请求编码未设置
       结果与前完全相同name为乱码 param可以正确解析

    3.chrome浏览器 get请求  请求编码未设置
       结果是name可以正确解析,param为乱码  可见上来的请求时utf-8的,和前端页面一致

    4.ie浏览器  get请求  请求编码未设置
     结果和之前相同,name可以正确解析,param为乱码

    之后又尝试了前端采取gbk方式编码的测试。现在直接说结果吧

    结论
      
    对于Tomcat服务器post请求是按照iso-8859-1进行编码的,get请求则是按照前端页面的编码方式编码的

    那么,我们在实际使用中,保证前后端编码格式一致是很有必要的,可以避免很多麻烦,要么都用gbk,要么都用utf-8

    如果一致了,那么get请求就可以直接进行解析,但是post请求还得进行处理。如果采用了如下代码

    request.setCharacterEncoding("UTF-8");

    那么post请求之后就可以直接获取参数,或者可以直接用

    String param=new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");

     这篇文章只是简单的进行了一下实验和分析,肯定还有不足和遗漏的地方,希望大家多多指教

    ps 再补充一点,在实验过程中,springmvc中返回为了方便用了@ResponseBody注解,返回中文时也出现了乱码,发现springmvc默认采用的iso-8859-1,所以返回字符串可以用

    return new String("你好".getBytes(), "ISO-8859-1");
  • 相关阅读:
    操作系统学习(一)、80x86保护模式内存管理
    Linux命令(十三) 建立目录 mkdir 删除目录 rmdir
    Linux命令(十二) 分割文件 split 合并文件 join
    Linux命令(十一) 显示文件类型 file
    linux下环境变量PS1设置
    Jenkins email-ext邮件通知模板
    building system busy, pls wait !!
    SCP 命令
    NDK Build 用法(NDK Build)
    android下m、mm、mmm编译命令的使用
  • 原文地址:https://www.cnblogs.com/mamuluke/p/4788896.html
Copyright © 2011-2022 走看看