java编码转换,get请求提交的中文参数乱码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java编码转换,get请求提交的中文参数乱码相关的知识,希望对你有一定的参考价值。
jsp页面的编码设置为utf-8
tomcat的http连接配置如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
Action部分的代码如下:
ServletActionContext.getRequest().setCharacterEncoding("UTF-8");
String provinceCode = ServletActionContext.getRequest().getParameter("provinceCode");//此处的参数值,已经是乱码
provinceCode = new String(provinceCode.getBytes("ISO-8859-1"),"UTF-8");
用ie8浏览utf8编码传递的是乱码,用火狐正常。现在要解决ie传递乱码的问题
getBytes试了多种转换,都转不回中文,求解答。。。。
Java关于中文乱码的解决办法
中文乱码分类:
(1)按照请求分类:
GET请求乱码
POST请求乱码
(2)按照乱码位置分类
从前台传到后台的数据乱码(存储到数据库中的数据乱码)
从后台传到前台的数据乱码(显示在页面的数据乱码)
乱码的解决方式:
(1)GET请求中请求参数乱码(注意:GET请求乱码,Spring的配置以及编码拦截器的配置是无效的)
方法一: 在后台处理编码,通过getBytes方法转换编码方式
String username = request.getParameter("username"); //获取请求参数值
username = new String(username.getBytes("iso8859-1"),"UTF-8");//将请求参数值转换为UTF-8编码格式
方法二:在客户端使用 URLEncoder.encode(name,”UTF-8”)对中文参数进行编码,在服务器端需要进行解码naem = java.net.URLDecoder.decode(name, “UTF-8”));
/* jsp页面中使用超链接跳转: 响应删除笔记评论 */
function deleteNoteComment(name){
window.location.href="<%=request.getContextPath() %>/note/deleteComment.do?name="+URLEncoder.encode(name,"UTF-8”);
}
//Spring 的controller类中接收请求参数
String name = request.getParameter(“name”); //得到请求参数
name = URLDecoder.decode(name, “UTF-8”)); //将请求参数转换为UTF-8编码格式
方法三:修改tomcat的server.xml文件:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443" URIEncoding="UTF-8"
useBodyEncodingForURI="true"/>
(2)POST请求中文乱码解决方法
方法一:通过设置请求参数的编码
在方法的第一句添加语句 : request.setCharacterEncoding("UTF-8");
在方法的最后一句添加语句: response.setContentType("text/html;charset=UTF-8");
方法二:编写编码拦截器
拦截器类 CharacterEncodingFilter .java
package cn.dfx.share_record_SSM.dsum.util; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CharacterEncodingFilter implements Filter{ private String encoding=null; public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)resp; request.setCharacterEncoding(encoding); chain.doFilter(request,response); response.setContentType("text/html;charset=UTF-8"); } //得到配置文件中的初始化参数 public void init(FilterConfig config) throws ServletException { encoding = config.getInitParameter("encoding"); } }
拦截器在web.xml中的配置
<filter> <filter-name>character</filter-name> <filter-class>cn.dfx.share_record_SSM.dsum.util.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>character</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
方法三:直接使用Spring的编码拦截器,在web.xml文件中添加配置
<filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter>
<filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
方法四:在Spring的Controller类中的RequestMapping配置
@RequestMapping(value="/goMain",produces="application/json;charset=UTF-8")
或者 : @RequestMapping(value="/goMain",produces="text/html;charset=UTF-8")
方法五:在Spring的主配置文件中添加以下配置(这是绝招了!!!) spring-servlet.xml
<!-- 处理spring的Controller类中返回json数据 中文乱码的配置 --> <bean class = "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <array> <bean class = "org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" /> </bean> </array> </property> </bean>
以上是关于java编码转换,get请求提交的中文参数乱码的主要内容,如果未能解决你的问题,请参考以下文章
java jsp 中 表单用 get 提交 怎样解决中文乱码问题?