解决为什么已经设置了request.setCharacterEncoding("utf-8");POST请求仍然乱码的问题

request.setCharacterEncoding("utf-8");应该在获取请求参数之前设置

  在 http://bbs.csdn.net/topics/380124606 和 http://bbs.csdn.net/topics/370125113 找到的答案


 

由于POST传来数据,Tomcat默认以ISO-8859-1编码成单字节数据,若没有进行请求编码设置或重新编码操作,那么中文字符会在jsp页面中输出???,出现类似多个?形式的乱码现象。

测试发现,尽管jsp页面contentType和content均进行了下述设置,表单还是乱码

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> page指令用于定义JSP页面的各种属性

  contentType:文档类型

  pageEncoding:页面编码

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 元素可提供有关页面的元信息

  http-equiv:把 content 属性关联到 HTTP 头部

  content:定义与 http-equiv 或 name 属性相关的元信息)

 

测试将表单method设置get,正常显示中文字符,这是由于Tomcat8之后,get请求默认编码为utf-8,不需要进行重新编码。

解决方式一:

    进行请求编码设置,这是最简单的,需要注意的问题就是不要在获取请求参数之后设置请求编码

    若已获取请求参数,此时还没有设置过编码,Tomcat会设置默认Post请求参数编码为ISO8859_1,那么你再设置成UTF-8也无效了,还是ISO-8859-1

解决方式二:

    类似与之前get请求的处理方法,先解码,再编码

    String str = new String(getParameter("message").getBytes("ISO-8859-1"),"UTF-8");

这里 http://cosmo1987.iteye.com/blog/1116959 有关于编码格式设置的一些认识。

 

posted @ 2018-02-27 22:31  柠檬水请加冰  阅读(18985)  评论(1编辑  收藏  举报