当前位置: 代码迷 >> Java Web开发 >> jsp <input text> post提交到action 中文乱码,该如何处理
  详细解决方案

jsp <input text> post提交到action 中文乱码,该如何处理

热度:5607   发布时间:2013-02-25 21:17:50.0
jsp <input text> post提交到action 中文乱码
我在jsp的页面中有一个<input type="text" name="name" id="name"/> 然后post方式提交到action,在action中String name接收,但name却是乱码,如何解决?

环境:tomcat6+jdk1.6+myeclipse6.5+struts2  

试过filter 和拦截器,在拦截器中 request.setCharacterEncoding(gbk utf-8 gb2312);都试过了,不可以。

但在action中,使用new String(str.getBytes("ISO-8859-1"),"utf-8"); 可以

------解决方案--------------------------------------------------------
首先保证你的页面的编码格式是UTF-8,
------解决方案--------------------------------------------------------
最好把字符集统一起来,而不是用转码转来转去的。

源代码编码、页面编码、中间件URL编码、数据库编码,这四者全部统一成:UTF-8


源代码编码这个是开发工具中配置的。

页面编码就是:
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

中间件如果是Tomcat的话,可以:
<Connector port="8080" debug="0" URIEncoding="UTF-8"/>

数据库编码是在数据库创建时配置的(不过你这个帖子中不涉及)。
------解决方案--------------------------------------------------------
但在action中,使用new String(str.getBytes("ISO-8859-1"),"utf-8"); 可以

如果是这样说明你页面的编码有问题
------解决方案--------------------------------------------------------
把前台和过滤器的编码都统一写成UTF-8 应该就可以了。。
------解决方案--------------------------------------------------------
大家编码都喜欢用UTF-8,可是我喜欢用gb2312……
------解决方案--------------------------------------------------------
你设置的格式要和页面的格式一样
------解决方案--------------------------------------------------------
哦 你自己可以将编码格式改为:GBK也行的。
------解决方案--------------------------------------------------------
一般是格式的问题,如果UTF-8解决不了的话,可以将他换成GBK
------解决方案--------------------------------------------------------
request.setCharacterEncoding(UTF-8);用<%= %>来输出显示下,看下能不能得到正常的值,如果不能,在考虑在其它过程中出了错
------解决方案--------------------------------------------------------
关键问题是检查你的整个应用,究竟各环节用了什么字符集,这是乱码的根本原因。

HTML页面编码,也就是浏览器右键查看的编码格式。

JSP页面编码。

Java源代码编码。

中间件默认编码。
------解决方案--------------------------------------------------------
探讨
大家编码都喜欢用UTF-8,可是我喜欢用gb2312……

------解决方案--------------------------------------------------------
很简单。我的网站也是一样的。你试试用这两种办法来处理。总有一个函数能用的。

static public String decodeNotAjax(String name) throws UnsupportedEncodingException{
if (name == null) return null;
return new String(name.getBytes("ISO-8859-1"),"gbk");
}

static public String getEncodeString(String value) throws UnsupportedEncodingException{
if (value == null) return null;
return java.net.URLDecoder.decode(value, "utf-8");
}
------解决方案--------------------------------------------------------
最好把编码统一。

------解决方案--------------------------------------------------------
页面编码 统一改成 UTF-8~~~貌似都知道了。
------解决方案--------------------------------------------------------
统一编码,就不用用什么***.getByte什么的
  相关解决方案