解决为什么已经设置了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 有关于编码格式设置的一些认识。

原文地址:https://www.cnblogs.com/NextLight/p/8481359.html

时间: 2024-10-01 07:38:20

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

request.setcharacterencoding()和request.setcontenttype(“html/css;charset”)的格式区别

1.request.setCharacterEncoding()是设置从request中取得的值或从数据库中取出的值 指定后可以通过getParameter()则直接获得正确的字符串,如果不指定,则默认使用iso8859-1编码.值得注意的是在执行setCharacterEncoding()之前,不能执行任何getParameter().而且,该指定只对POST方法有效,对GET方法无效.分析原因,应该是在执行第一个getParameter()的时候,Java将会按照编码分析所有的提交内容,而后

request.setCharacterEncoding 关于编码 概述

request.setCharacterEncoding 关于编码 概述从Servlet2.3开始,支持客户端内容协商.服务端内容协商,很早就有,服务端在返回的数据中通过Content-Type来指定返回的数据内容.在REST叫嚣的背景下,客户端也需要协商:例如通过PUT方法提交一段XML或JSON数据来更新服务端的一个对象.客户端可通过URL后缀名.xml或.json的方式来告诉服务端提交的数据类型:也可通过HTTP头的Content-Type来告之服务端提交的数据类型. 关于该问题的Blog

response.setContentType与 request.setCharacterEncoding 区别

1.request.setCharacterEncoding()是设置从request中取得的值或从数据库中取出的值的编码 2.response.setContentType指定 HTTP 响应的编码,同时指定了浏览器显示的编码. 3.response.setCharacterEncoding设置HTTP 响应的编码,如果之前使用response.setContentType设置了编码格式,则使用response.setCharacterEncoding指定的编码格式覆盖之前的设置. 与resp

解决Bug:Size of a request header field exceeds server limit

用了cms 发现这玩意真不好,老是有各种奇芭的问题跳出来 有时浏览网页时会出现 Bad Request Your browser sent a request that this server could not understand. Size of a request header field exceeds server limit. 意思为:错误的请求.您的浏览器发送一个请求,该服务器无法理解.一个请求头域的大小超过服务器的限制. 以下是解决方法,不过,我个人感觉,不可能无限制的增大请求

通过过滤器和增强request对象解决get提交请求服务器端乱码。

1.表单用get方式提交 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&

解决SpringMVC拦截器中Request数据只能读取一次的问题

解决SpringMVC拦截器中Request数据只能读取一次的问题 开发项目中,经常会直接在request中取数据,如Json数据,也经常用到@RequestBody注解,也可以直接通过request.getParameter()从Request中取数据. 但是有时候我们要在请求到具体的业务之前做一些操作比如日志记录.数据校验.统一的处理等等,可以在拦截器中处理. 由于 request中getReader()和getInputStream()只能调用一次,我们在拦截器中获取Request中数据后

request.setCharacterEncoding(&quot;utf-8&quot;);

request.setCharacterEncoding("utf-8");不加这句话时,从input控件得到值要用new String(request.getParameter("").getBytes("ISO-8859-1"),"utf-8")方法,而从 a href=""中得到值直接用request.getParameter("")方法:而加入了这句话后,从input控件得到值直

解决ICS40上设置APN无权限问题

在ICS40以前的版本中,如果程序需要设置APN,只需要在AndroidManifest文件中声明<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>这个权限即可.在40的机器上运行则会抛出以下异常:java.lang.SecurityException: No permission to write APN settings: Neith

Apache HttpAsyncClient 如何设置per request timeout

最近做一个项目时用到HttpAsyncClient:因项目所需,要求能对一个具体的request 设置连接和读写超时:但发现在HttpAsyncClient中,只有在创建一个HttpAsyncClient实例时才能通过RequestConfig设置一个timeout,除此之外并没有一个接口可以设置单个请求的超时.为了达到项目的要求,只有从把HttpAsyncClient的源码大致读了一遍,一是希望能从源码中找到设置超时的方法,二是希望,如果确实没有办法,能仿照源码写一个可控制超时的HttpAsy