码迷,mamicode.com
首页 > 其他好文 > 详细

中文乱码问题

时间:2014-12-24 21:36:07      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:jsp   java   javase   web   乱码   

1.在JSP页面中出现中文乱码
要在在JSP页面中输出中文,要设置页面的编码方式。如果不设置,默认是ISO-8859-1,这样,中文就会出现乱码。解决方法是在JSP页面中加入page指令,设置页面编码pageEncoding支持中文字符,例如GBK或者UTF-8。但要注意的是,在保存文件时的编码要和这里设置的pageEncoding一致。
示例:
<%@ page pageEncoding="UTF-8" %>
<!DOCTYPE html> 
<html> 
    <head>
        <title>解决JSP页面输出中文乱码问题</title>  
    </head> 
    <body>  
        解决JSP页面输出中文乱码问题 
    </body> 
</html> 


保存时选择另存为,在弹出框中选择编码方式为UTF-8

2.

post方式传值乱码

解决方法是:

       在接收页面设置request.setCharacterEncoding("UTF-8")。最好通过过滤器实现每个页面都设置为  

           request.setCharacterEncoding("UTF-8")。

get方式传值乱码: 
get方式传值有两种,一种是表单get传值,另一种是url地址传值(实质上这两种方式都是通过url参数的方式传值)。
表单方式get传值:
表单方式get传值的编码过程为,首先浏览器根据页面的charset编码方式对传值进行编码,然后提交至服务器交给tomcat,tomcat对这些信息进行解码时,采用的解码方式是由server.xml文件中的URIEncoding设置决定的,也就是说,当我们使用命令request.getParameter("")获取表单参数值时,得到的字符串,经过了charset的编码和URIEncoding的解码。
由上所知,只要charset的编码和URIEncoding的解码一致,并且支持中文,就能保证没有乱码。
设置URIEncoding的方法如下:
方法一: 
修改$TOMCAT/conf/server.xml文件,在HTTP Connector或者AJP Connector的配置加上URIEncoding="gbk"  
  
 <...   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
      enableLookups="false" redirectPort="8443" acceptCount="100"  
  connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="gbk" />  
 方法二:  
  
使用useBodyEncodingForURI="true". 这个方法适合你的TOMCAT实例下需要跑多个不同Encoding的程序时。  
  
<...  maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
       enableLookups="false" redirectPort="8443" acceptCount="100"  
      connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" /> 
     enableLookups="false" redirectPort="8443" protocol="AJP/1.3" useBodyEncodingForURI="true" /> 
在Tomcat配置中,连接器(HTTP Connector)属性中有一个URIEncoding和  
useBodyEncodingForURI属性,这两个属性设置对URL后的附加参数进行URL解码时该如何选择 字符集编码。URIEncoding用于制定URL后的附加参数的字符集编码,useBodyEncodingForURI 则说明是否采用实体内容的字符集编码设置来替代URIEncoding的设置,也就是说当 useBodyEncodingForURI属性设置为true时ServletRequest.setCharacterEncoding方法设置的字符集编码也影响getParameter等方法对URL地址后的参数进行URL解码的结果。(在/%TomCat_Home%/ conf\server.xml文件中找到 <Connector>标记,然后在后面加上useBodyEncodingForURI=true)  
  
url方式get传值乱码:  
  
于这种方式,浏览器不会采用页面的charset方式对URL中的中文进行编码后提交至服务器(IE,FireFox都一样),而是采用系统的GBK转码为ISO-8859-1之后提交至服务器tomcat,所以这个过程为:  
  
首先,url地址中的中文被从gbk转换成ISO-8859-1,交给tomcat后,又被tomcat根据URLEcoding解码,这种情况,只有把URLEcoding设置为gbk才能在request.getParameter("")时不出现乱码。但是这样就会影响到上面的配置,所以一个好的解决方法是,使用java.net.URLEcoder和URLDecoder对地址中的中文进行手动编码和解码。 
所以一个万全的解决方法为:
1.所有页面的charset设置为UTF-8。
2.Tomcat的URIEncoding默认是ISO-8859-1,而我设置为UTF-8,主要是想解决中文命名的文件以及请求以get方式提交有可能出现的乱码问题。
3.添加过滤器,调用request.setCharacterEncoding("utf-8")方法将request的字符集设定为utf-8,解决请求以post方式提交的乱码问题。
4. url地址中存在中文参数时,首先对中文参数使用URLEcoder编码为utf-8,然后在request.getParameter("")接收到参数后再使用URLDecoder还原。例如: 
From.jsp页面:
<%String username = "张某某" ;
     username = URLEncoder.encode(username,"utf-8"); 
     %> 
     <a href="to.jsp?param=<%=username %>">转入</a> 
To.jsp页面 
<%=URLDecoder.decode(request.getParameter("param"),"utf-8")%>
总之 ,乱码的解决方案如下:
post传值乱码时,在接收端设置request.setCharacterEncoding("UTF-8");     
-- 最好用过滤器设置,并且设置response.setContentType("text/html;charset=utf-8");
get传值或者url乱码时,手动设置接收的参数String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ;  

中文乱码问题

标签:jsp   java   javase   web   乱码   

原文地址:http://blog.csdn.net/u011707402/article/details/42127419

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!