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 有关于编码格式设置的一些认识。