`
paddy.w
  • 浏览: 505101 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jsp乱码问题的解决方法

阅读更多
      由于jdk中只规定了必须有一些unicode utf8等编码的实现,好像对汉字编码没有什么实现的硬性规定,所以有时候就会出现乱码问题。

        最简单最根本的解决方案:在允许的情况下,把所有的编码统一的都改为UTF-8

        数据库访问时的乱码问题,可以数据库连接中加上useunicode =true 以及用gbk 或gb2312编码就可以了:
        在建立数据库时,将数据库中的所有表的编码方式都设置为gbk,原因是JSP中也使用了gbk编码,这样统一的结果是可以减少很多不必要的编码转换问题。另外,在使用JDBC连接MySQL数据库时,连接字符串写成如下形式可以避免一些中文问题:

jdbc://mysql://hostname:port/DBname?user=username& 
password=pwd& 
useUnicode=True& 
characterEncoding=gbk


        如果是以数据源的方式连接数据库,在配置文件中使用:
<parameter> 
<name>url</name> 
<value> 
jdbc://mysql://hostname:port/DBname?&useUnicode=True&characterEncoding=gbk 
</value> 
</parameter> 

        但是,如果使用一个已经存在的数据库,数据库的编码方式是ISO-8859-1,而Web应用中使用UTF-8,且数据库中已经有很多重要信息,因此不能通过更改数据库的编码方式来解决问题。这个时候,在往数据库中写数据库时,一定要在JDBC连接字符串中加入
“useUnicode=True&characterEncoding=ISO-8859-1”
这样可以顺利的往数据库中写入正常的数据。但是,在将数据读出数据库时,乱码又会出现,这个时候就应该在数据取出时对其转码,可以将转码功能写为一个函数,具体实现如下:
public String charConvert(String src){ 
       String result=null; 
   if(src!=null){ 
   try{ 

// 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组->通过使用指定的 charset 解码指定的 

byte 数组,构造一个新的 String。 
          result=new String(src.getBytes("ISO-8859-1"),"gbk"); 
       }catch(Exception e) 
   { 
             result=null; 
             } 
       } 
      return result; 
}
       于是,在从数据库读出数据过后调用charConvert(rs.getString("colName")),这样就可以正常显示数据库中的中文数据了。


        JSP中输出中文的乱码问题
        所谓在JSP输出中文,即直接在JSP中输出中文,或者给变量赋中文值再输出等,这种情况下的乱码问题往往是因为没有给JSP页面制定显示字符的编码方式,解决问题如下:

        ·在JSP页面头部加上语句<%@ page contentType="text/html;charset=gbk"%>(在Servlet页面中使用

httpServletResponse.setContentType("text/html;charset=gbk")),最好同时在JSP页面的head部分加上<meta http-

equiv="Content-Type" content="text/html;charset=gbk">

        ·在每次要输出中文的地方主动转换编码方式,比如要在页面中输入“中文”二字,就可以用以下方式:
<% 
       String str="中文"; 
      byte[] tmpbyte=str.getBtyes("ISO-8859-1"); 
       str=new String(tmpbyte); 
       out.print(str); 
%>

        获取表单提交的数据时的中文乱码问题

        在没有加任何其他处理之前,用request.getParameter(panamName)获取表单提交中的数据,且表单数据中含有中文时,返回的字符串会出现乱码。出现这种问题的原因是Tomcat的J2EE实现对表单提交,即以POST方式提交的参数采用默认的ISO-8859-1来处理。
        比如,建立一个test.jsp,内容为:
<%@ page contentTyp="text/html;charset=gbk"%> 
<% 
       String str=request.getParameter("chStr"); 
      if(str==null) str="没有输入值"; 
%> 
<html> 
   <head> 
      <title>中文Test</title> 
      <meta http-equiv="Content-Type" content="text/html;charset=gbk"> 
      <meta http-equiv=param content=no-cache> 
   </head> 
   <body>你输入的内容为:<%=str%><br> 
      <form action="test.jsp" method="post"> 
       请输入中文:<input type="text" name="chStr"> 
      <input type="submit" value="确定"> 
      </form> 
   </body> 
</html> 

        运行过后,在输入框中输入汉字“中文”,提交过后再显示出来后就变成了一堆乱码。解决此问题的办法有两个。一是不修改其他设置,只是在将表单中的中文数据取出来过后再转换编码,方法如语句
String str=request.getParameter("chStr");
String str=new String(sre.getByte("ISO-8859-1"),"gbk")

        但这种方法只是从一个局部来考虑问题,如果这样的地方太多,就不得不将这条语句重复写很多次,在比较大的项目中,这是一种不太可行的方案。另一个方法就是让对所有页面的请求都通过一个Filter,将处理字符集设置为gbk。具体的做法如下(在Tomcat的webapps/servlet-examples目录有一个完整的例子,也可以参考其中web.xml和SetCharacter EncodingFilter的配置):

        首先将%TOMCAT%/webapps/servlets-examples/Web-INF/classes/filters/目录下的文件SetCharacterEncodingFilter.class拷贝到自己应用的/Web-INF/classes/com/util/filter目录下;然后再在web.xml文件的<web-app>后面加上如下配置代码:
<filter> 
     <filter-name>Set Character Encoding</filter-name> 
     <filter-class>com.ccut.struts.SetCharacterEncodingFilter</filter-class> 
     <init-param> 
        <param-name>encoding</param-name> 
        <param-value>gbk</param-value> 
     </init-param> 
</filter> 
<filter-mapping> 
     <filter-name>Set Character Encoding</filter-name> 
     <url-pattern>/*<url-pattern> 
    </filter-mapping> 


URL中的中文问题

       对于直接通过在URL中传递中文参数,如“http://localhost/a.jsp?str=中文”这样的get请求,在服务端用request.getParameter("name")时返回的往往是乱码。按以上的做法设置Filter没有用,用request.setCharacterEncoding("gbk")的方式,仍然不管用。
       例如,建立test2.jsp文件,内容为:

<%@ page contentTyp="text/html;charset=gbk"%> 
<% 
       String str=request.getParameter("chStr"); 
      if(str==null) str="没有输入值"; 
%> 
<html> 
      <head> 
         <title>中文Test</title> 
         <meta http-equiv="Content-Type" content="text/html;charset=gbk"> 
         <meta http-equiv=param content=no-cache> 
      </head> 
      <body>你输入的内容为:<%=str%><br> 
      <form action="test.jsp" method="post"> 
         <a href="test2.jsp?chStr=中文">点击这里提交中文参数</a> 
      </form> 
      </body> 
</html> 

        运行后,可见通过URL传递的中文参数取出来过后变成了乱码,造成这种结果的原因是Tomcat中以get方式提交的请求对query-string处理时采用了和post方法不一样的处理方式。
        解决这个问题的方法是打开Tomcat安装目录下的/conf/server.xml文件,找到Connector块,往其中添加URIEncoding="gbk",添加过后完整的Connector块代码如下:
<Connector port="8080"               
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
enableLookups="false" redirectPort="8443" acceptCount="100" 
    debug="0" connectionTimeout="20000" 
    disableUploadTimeout="true" 
    URIEncoding="gbk" /> 

在Struts中证实可以解决URI传递乱码问题.
可以这样做
1.设定Tomcat的URI编码为"UTF-8":修改%tomcat%\conf\server.xml中的<Connector>在中间加入URIEncoding="UTF-8";
2.先在页面上encodeURI(url);
3.后台代码中直接取出来的中文参数就已经OK了.
4. 试一试request.setCharacterEncoding("GBK");
不过这种方法用在servlet中行不通,在servlet中就必须对URI进行处理,Tomcat中有没有加入URIEncoding都没有差别.
分享到:
评论

相关推荐

    JSP中文乱码问题解决办法

    JSP 中文乱码问题解决办法 JSP 页面中中文乱码问题是指在 JSP 页面中使用中文时,页面显示乱码的现象。这种问题的解决办法可以从多方面入手,包括设置页面的字符编码、使用 POST 方式提交表单、使用 GET 方式提交...

    JSP乱码 N种解决方案

    本文将深入探讨“JSP乱码”的多种解决方案,并提供实用的解决策略。 1. **理解字符编码的基本概念** - 字符编码是计算机对文字进行存储和处理的标准,常见的有ASCII、GBK、UTF-8等。 - JSP页面默认使用ISO-8859-1...

    解决JSP中文乱码问题

    下面我们将详细讨论 JSP 中文乱码问题的成因和解决方法。 JSP 中文乱码问题的成因 JSP 中文乱码问题的成因主要有两方面,一是 Java 和 JSP 文件本身编译时产生的乱码问题,二是 Java 程序于其他媒介交互产生的乱码...

    Jsp乱码问题解决

    ### JSP乱码问题解决 #### 一、JSP页面显示乱码 在JSP页面开发过程中,中文乱码是一个常见的问题。这个问题主要是由于服务器端和客户端(浏览器)的编码设置不一致导致的。 **原因分析:** 1. **服务器编码设置...

    web项目乱码问题 jsp乱码问题解决

    解决JSP页面显示中文乱码的问题,关键在于确保所有环节使用相同的字符编码。可以按照以下步骤操作: 1. 使用统一的文件编码:确保JSP文件以UTF-8或其他支持中文的编码格式存储,并且IDE(如Eclipse)配置为使用该...

    jsp乱码解决方案 本方案解决了jsp常见的乱码问题

    ### jsp乱码解决方案 #### 一、引言 在Web开发中,特别是使用Java Server Pages (JSP)进行开发时,字符编码问题是一个经常遇到的技术难题。如果处理不当,很容易导致网页显示乱码,影响用户体验及数据的正确性。...

    jsp中文乱码问题解决

    解决jsp中文乱码问题的方法有多种,下面我们将讨论几种常见的解决方法。 一、页面中文乱码解决 对于jsp页面中文乱码问题,可以通过修改jsp页面的编码方式来解决。我们可以在jsp页面的开头添加 ”utf-8” %&gt;指令,...

    java乱码问题解决方法

    Java 乱码问题是 Java 开发中常见的问题之一,解决这个问题需要了解 Java 的编码方式、JSP 中文乱码问题、Tomcat 5.5 中文乱码问题、JDBC ODBC Bridge 的 Bug 及其解决方法、Solaris 下 Servlet 编程的中文问题及...

    JSP中文乱码问题解决方法小结

    以下是一些关键的知识点和解决方法: 1. **JSP页面乱码** 当JSP页面中的中文字符无法正确显示时,通常是因为没有指定页面的字符集编码。JSP支持多种字符集,如GBK、UTF-8等。为解决此问题,可以在JSP页面顶部添加`...

    JSP乱码解决方案

    本文将深入探讨JSP乱码的原因及其解决方案,帮助开发者有效地处理这类问题。 ### 1. JSP乱码的成因 - **字符集设置不一致**:JSP文件、HTML页面、HTTP头、Servlet输出以及数据库存储等环节的字符集设置不一致,...

    Jsp乱码问题解决2

    ### JSP乱码问题及其解决方案 #### 一、最基本的乱码问题 JSP页面中出现乱码最常见的原因是页面编码不一致。例如,在JSP页面中设置了多种不同的编码格式,这会导致浏览器无法正确解析中文字符,从而显示为乱码。...

    jsp乱码jsp乱码jsp乱码

    jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题jsp乱码jsp乱码问题...

    jsp中文乱码问题jsp中文乱码问题详解

    解决方法是,确保jsp文件的存储格式和解码格式一致。例如,使用`&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;`和`;charset=UTF-8"%&gt;`指定jsp文件的存储格式和解码格式为UTF-8。 2. 表单使用Post方式提交后接收...

    jsp乱码的3种解决方法

    本文将详细讲解三种解决JSP乱码的方法。 ### 1. 设置页面编码 JSP页面的编码设置是解决乱码问题的基础。在JSP文件的顶部,使用`&lt;%@ page&gt;`指令设置页面编码。例如: ```jsp ;charset=UTF-8" language="java" %&gt; `...

    jsp乱码解决方法.txt

    ### JSP乱码问题及其解决方法 #### 一、引言 在进行Java Web开发时,经常遇到的一个问题是页面字符编码出现乱码的情况。虽然这看似是一个小问题,但如果处理不当,会对用户体验甚至整个项目的质量产生严重影响。...

    jsp用过滤器解决中文乱码问题的方法.docx

    jsp 用过滤器解决中文乱码问题的方法 jsp(JavaServer Pages)是一种广泛应用于Web开发的技术,但是在实际开发中,我们经常会遇到中文乱码问题。为了解决这个问题,我们可以使用jsp过滤器来实现编码设置。我今天要...

    java项目jsp中乱码问题解决

    解决这个问题的方法是在JSP页面顶部添加`; charset=utf-8"%&gt;`指令,指示JSP使用UTF-8编码进行内容显示。同时,为了确保浏览器正确解析页面,可以在HTML的`&lt;head&gt;`部分添加`; charset=utf-8"&gt;`标签。此外,如果直接在...

    5种JSP页面显示为乱码的解决方法

    解决方法与Servlet类似,同样需要在JSP页面中处理请求的编码: ```jsp ("GBK"); %&gt; ``` 或者在Servlet中处理后再转发到JSP页面。 4. `&lt;jsp:forward&gt;`时页面显示乱码 使用`&lt;jsp:forward&gt;`标签进行页面跳转时,...

    JSP中文乱码问题解决总结

    通过以上方法,我们可以有效地解决JSP中文乱码问题。在实践中,理解字符集的工作原理,以及其在不同环节中的应用,对于预防和解决乱码问题至关重要。希望这个总结能帮助到大家,减少在查找和调试这类问题上花费的...

Global site tag (gtag.js) - Google Analytics