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

Posted nextlight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决为什么已经设置了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 有关于编码格式设置的一些认识。

 


以上是关于解决为什么已经设置了request.setCharacterEncoding("utf-8");POST请求仍然乱码的问题的主要内容,如果未能解决你的问题,请参考以下文章

foxmail7.2版本,邮件已经点击阅读了,但是过了不久,又变成未读状态,如何解决。

NXP 飞思卡尔 S12Z 系列单片机 SCI 设置(解决SCI已经设置完成,但却无法通信的问题)

全网首发:github已经设置了令牌token,为什么还要验证用户密码

如何解决 npm run build 137 错误?已经设置了10gb

我已经在 firebase 项目设置调试以及 playconsole 上添加了指纹,但是电话身份验证不起作用如何解决这个问题?

安装失败已安装了签名冲突的应用恢复出厂设置