java get方式java get中文乱码问题

查看: 185836|回复: 2
request.getParameter中文乱码问题
& && && && &http请求是以ISO-8859-1的编码来传送url的
& && && && &如果页面的content-type为utf-8,那么在发送请求时,会将字符转成utf-8后进行传送
& && && && &如: 中 的UTF-8编码为:E4 B8 AD在请求时为%E4%B8%AD字节之间是%分隔
& && && && & 那么服务器收到这段字节流后,必须将它转成相应的字符,平时所使用的request.getParameter(&name&)直接得到了字符串,那么从字节流到字符流这个过程系统己经帮助我们完成了(乱码的产生由此开始)
& && & 可以试试:new String(request.getParameter(&&).getBytes(&ISO-8859-1&),&UTF-8&)还原成原始字符串
复制代码
上一篇:下一篇:
编码统一,页面及控制层都设置为utf-8,尽量用post方式提交数据
蓝色血姬.不知道好不好.我正是遇到24299人阅读
servlet(8)
解决办法:&&
步骤1.& 加过滤器,即在filter里的init()里加上request.setCharacterEncoding("utf-8");相当于每个页面的编码都是utf-8,
步骤2.& 将表单提交方法改成post方式,至于get方式的解决目前还不知道
上面两个步骤保证了数据在提交给后台的过程中不乱码
步骤3.& 数据库里面需要中文的字段的类型都改成nvarchar,保证数据写入数据库的时候不乱码
最后,在页面的&%@ page contentType="text/charset=utf-8" language="java"%&charset=utf-8"写成utf-8保证在输出的时候编码为utf-8
下面的网上的一些说法:
&其实这是个很普遍的问题,网上也有很多的文章去全面的解释jsp中文乱码的问题。在这里我只是想说一下get方式提交表单时的中文乱码解决方案。
&&&& 现在做系统的时候,为了解决中文的乱码问题,我们通常会配置一个编码过滤器,比如我们直接用Spring给我们提供的编码过滤器
&&& &!-- 编码过滤器 --&&filter&&& &filter-name&Spring character encoding filter&/filter-name&&& &filter-class&&&& org.springframework.web.filter.CharacterEncodingFilter&& &/filter-class&&& &init-param&&&& &param-name&encoding&/param-name&&&& &param-value&gb2312&/param-value&&& &/init-param&&/filter&&filter-mapping&&& &filter-name&Spring character encoding filter&/filter-name&&& &url-pattern&/*&/url-pattern&&/filter-mapping&
这段配置就相当于在代码中写了如下代码:request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");
另外也可以自定义过滤器
&1 创建ChineseFilter类。
import java.io.IOE
import javax.servlet.F
import javax.servlet.FilterC
import javax.servlet.FilterC
import javax.servlet.ServletE
import javax.servlet.ServletR
import javax.servlet.ServletR
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
public class ChineseFilter extends HttpServlet implements Filter {
private FilterConfig filterC
//Handle the passed-in FilterConfig
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterC
//Process the request/response pair
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) {
String encoding=filterConfig.getInitParameter("encoding");//从WEB.xml配置文件中取出参数,这样我们可以通过配置修改编码格式.
request.setCharacterEncoding(encoding);//设置请求的编码格式
filterChain.doFilter(request, response);
} catch (ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
} catch (IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
//Clean up resources
public void destroy() {
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(arg0, arg1);
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(arg0, arg1);
2 web.xml配置(注意:jsp/servlet2.3以上版本才支持filter,所以前面应该改为&!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "/dtd/web-app_2_3.dtd"&)
&filter-name&ChineseFilter&/filter-name&
&filter-class&spell.ChineseFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&UTF-8&/param-value&
&/init-param&
&filter-mapping&
&filter-name&ChineseFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
在jsp页面中,设置页面的存储编码和页面输出时的编码:
&%@ page language="java" contentType="text/ charset=utf-8"&&& pageEncoding="utf-8"%&
这样,就统一了编码为utf-8。
这种方式在post提交表单中含有中文时没有问题。但是在用get提交时,如果含有中文,就会出现类似于&? ? ?&的乱码问题。为什么会这样呢,造成这种现象的原因是Tomcat对get和post两种提交方式的处理方法不一样造成的。自从Tomcat5.x开始,GET和POST方法提交的信息,Tomcat采用了不同的方式来处理编码,对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认的iso-8859-1编码。而GET请求则不同,Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码。
解决办法如下:
<span style="COLOR: #.配置tomcat的配置文件server.xml里这句:&&&&&&&&&&&&&&Connector URIEncoding="GB2312" &&&&&&&&&&&&&&&& port="8080"&& maxHttpHeaderSize="8192"&&&&&&&&&&&&&& maxThreads="150" minSpareThreads="25" maxSpareThreads="75"&&&&&&&&&&&&&& enableLookups="false" redirectPort="8443" acceptCount="100"&&&&&&&&&&&&&& connectionTimeout="20000" disableUploadTimeout="true" /&&&&&&&&&&&&&&&&& 加上这句:URIEncoding="GB2312"2.使用String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"GB2312");转化编码
推荐使用第二种方式。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:289064次
积分:3508
积分:3508
排名:第5273名
原创:73篇
转载:48篇
评论:39条
(1)(1)(1)(1)(1)(3)(1)(1)(3)(3)(2)(1)(1)(1)(4)(8)(10)(21)(57)随笔 - 172
本blog已经搬到新家了, 新家:
阅读排行榜
评论排行榜

我要回帖

更多关于 get方式提交中文乱码 的文章

 

随机推荐