`

java乱码处理集中营

阅读更多

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

数据库访问时的乱码问题,可以数据库连接中加上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都没有差别.

分享到:
评论

相关推荐

    java乱码处理

    ### Java中文乱码处理 #### 一、Java中文问题的由来 Java作为一种跨平台的编程语言,其内部实现和class文件均基于Unicode编码,这为Java程序带来了优秀的跨平台特性。然而,这也同时带来了一些关于中文乱码的问题...

    Java编程乱码处理方法大全(附图说明)

    在Java编程过程中,乱码问题是一个常见的困扰,尤其是在处理字符编码时。本篇文章将全面解析Java中的乱码处理方法,涵盖纯Java代码、Servlet、JSP以及EJB类的解决方案,帮助开发者有效解决这一问题。 首先,理解...

    java 中文乱码 处理

    ### Java中文乱码处理 在Java开发过程中,中文乱码问题常常令人头疼,尤其是在Web应用中,客户端提交的数据经常会出现编码不一致导致的乱码问题。本文将介绍几种解决Java中中文乱码的方法,希望能对您有所帮助。 #...

    java URL中文参数乱码处理

    js 中乱码处理法方式 encodeURIComponent(encodeURIComponent(customerAddress)) decodeURIComponent(customerName) js到java encodeURI(url) String qijuType= new String(request.getParameter( (...

    java乱码处理汇总

    乱码的处理!程序员永远无法避免的话题,解决乱码总汇

    乱码处理文件 乱码处理文件

    乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理...

    Java乱码学习 Java乱码学习

    Java 乱码问题一直是开发过程中常见的困扰之一,它涉及到字符编码的理解、文件编码的设定以及网络传输中的编码处理。本文将深入探讨Java编程中的乱码现象,并提供一系列的解决策略。 首先,我们要理解两个基本概念...

    java乱码自己解决的办法

    在Java开发过程中,字符编码问题常常困扰着开发者,尤其是在处理中文等多字节字符时,乱码问题尤为突出。本文将深入探讨Java乱码的根源,并提供一系列实用的解决方案,帮助开发者有效应对这一挑战。 ### Java乱码...

    java处理中文乱码

    在Java开发中,处理中文乱码是一个常见的问题,尤其是在处理Web应用程序时。下面将详细介绍三种处理Java中中文乱码的方法。 方法一:类字符转换 这个方法涉及到将字符串从一种编码格式转换为另一种编码格式。在给...

    java中文乱码大全

    Java中文乱码问题是编程者在开发Java应用程序时经常遇到的问题,尤其是涉及到中文字符处理时。这些问题产生的根本原因在于Java内部采用UNICODE编码,而不同的操作系统和浏览器可能支持不同的编码格式,如Windows中文...

    java乱码解决方法

    解决java web开发中遇到的前后台传值乱码问题。

    Java关于中文乱码问题的多种解决方法

    在Java编程中,中文乱码问题是一个常见的困扰,尤其是在处理文件读写、网络传输或数据库操作时。本文将深入探讨几种解决Java中中文乱码问题的方法,并以MyEclipse为开发环境,结合实际示例进行讲解。 1. 文件读写中...

    解析Java中文乱码的处理方法

    Java编程语言在处理中文字符时,可能会遇到乱码问题,这通常是由于编码设置不正确或者在数据读写过程中没有统一编码格式导致的。本篇文章将深入探讨Java中处理中文乱码的各种方法,帮助开发者有效解决这类问题。 ...

    java中文乱码问题处理方案.docx

    "java中文乱码问题处理方案" java 中文乱码问题处理方案是 java 开发者经常遇到的问题之一。这个问题的存在是由于 java 系统的中文问题原理没有被正确地理解和解决。只有当我们了解了 java 系统的中文问题原理,...

    java乱码转换

    java 乱码 转换 utf

    java乱码解决方案

    java乱码解决方案,在使用eclipse时出现的乱码问题,帮助解决

    java乱码问题解决方法

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

    java开发乱码问题处理大全

    ### Java开发乱码问题处理大全:精通乱码处理,提升专业技能 在Java开发中,乱码问题是开发者常遇到的挑战之一,尤其是在处理多语言、跨平台应用时更为显著。本文将深入探讨Java开发中常见的乱码问题及其解决策略,...

    java中文乱码解决问题

    JAVA 中文乱码解决问题 JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的...

    JAVA 乱码问题集合

    在Java编程中,乱码问题是一个常见的困扰,尤其是在处理字符编码时。以下是一些关键的知识点,可以帮助理解和解决Java中的乱码问题。 首先,我们需要理解字符编码的基本概念。字符编码是用来表示文本的一种方式,...

Global site tag (gtag.js) - Google Analytics