<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Love Pisces

    It's not your aptitude but your attitude that determines your altitude!
    posts - 2, comments - 43, trackbacks - 0, articles - 9

    如何處理中文亂碼問題

    Posted on 2007-06-10 14:20 筱筱 閱讀(3120) 評(píng)論(43)  編輯  收藏 所屬分類: Java

          在Java編程中,經(jīng)常會(huì)碰到漢字的處理及顯示問題,以不小心就會(huì)產(chǎn)生一大堆亂碼或者問號(hào)。造成這種問題的根本原因是Java中默認(rèn)的編碼方式是Unicode,而中國(guó)人通常使用的文件和DB都是基于GB2312或BIG5等編碼,故會(huì)出現(xiàn)此問題。
          對(duì)于不同的問題,不同的JDK版本,不同的應(yīng)用服務(wù)器(如Tomcat,Jboss,Weblogic),處理方法都會(huì)有一些微小的差異。在這里,主要針對(duì)Tomcat中JSP開發(fā)容易出現(xiàn)的中文亂碼問題進(jìn)行討論,一般有以下幾種情況:

          1.JSP中輸出中文的亂碼問題

          所謂在JSP輸出中文,即直接在JSP中輸出中文,或者給變量賦中文值再輸出等,這種情況下的亂碼問題往往是因?yàn)闆]有給JSP頁(yè)面制定顯示字符的編碼方式,解決問題如下:

          ·在JSP頁(yè)面頭部加上語句<%@ page contentType="text/html;charset=gbk"%>(在Servlet頁(yè)面中使用

    httpServletResponse.setContentType("text/html;charset=gbk")),最好同時(shí)在JSP頁(yè)面的head部分加上<meta http-equiv="Content-Type" content="text/html;charset=gbk">

          ·在每次要輸出中文的地方主動(dòng)轉(zhuǎn)換編碼方式,比如要在頁(yè)面中輸入“中文”二字,就可以用以下方式:

    <%
          String str
    ="中文";
          
    byte[] tmpbyte=str.getBtyes("ISO-8859-1");
          str
    =new String(tmpbyte);
          out.print(str);
    %>


          2.獲取表單提交的數(shù)據(jù)時(shí)的中文亂碼問題

          在沒有加任何其他處理之前,用request.getParameter(panamName)獲取表單提交中的數(shù)據(jù),且表單數(shù)據(jù)中含有中文時(shí),返回的字符串會(huì)出現(xiàn)亂碼。出現(xiàn)這種問題的原因是Tomcat的J2EE實(shí)現(xiàn)對(duì)表單提交,即以POST方式提交的參數(shù)采用默認(rèn)的ISO-8859-1來處理。
          比如,建立一個(gè)test.jsp,內(nèi)容為:

    <%@ 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>你輸入的內(nèi)容為:<%=str%><br>
          
    <form action="test.jsp" method="post">
          請(qǐng)輸入中文:
    <input type="text" name="chStr">
          
    <input type="submit" value="確定">
          
    </form>
       
    </body>
    </html>


          運(yùn)行過后,在輸入框中輸入漢字“中文”,提交過后再顯示出來后就變成了一堆亂碼。解決此問題的辦法有兩個(gè)。一是不修改其他設(shè)置,只是在將表單中的中文數(shù)據(jù)取出來過后再轉(zhuǎn)換編碼,方法如語句String str=request.getParameter("chStr");String str=new String(sre.getByte("ISO-8859-1"),"gbk"),但這種方法只是從一個(gè)局部來考慮問題,如果這樣的地方太多,就不得不將這條語句重復(fù)寫很多次,在比較大的項(xiàng)目中,這是一種不太可行的方案。另一個(gè)方法就是讓對(duì)所有頁(yè)面的請(qǐng)求都通過一個(gè)Filter,將處理字符集設(shè)置為gbk。具體的做法如下(在Tomcat的webapps/servlet-examples目錄有一個(gè)完整的例子,也可以參考其中web.xml和SetCharacter EncodingFilter的配置):

          首先將%TOMCAT%/webapps/servlets-examples/Web-INF/classes/filters/目錄下的文件SetCharacterEncodingFilter.class拷貝到自己應(yīng)用的/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>


          3.URL中的中文問題

          對(duì)于直接通過在URL中傳遞中文參數(shù),如“http://localhost/a.jsp?str=中文”這樣的get請(qǐng)求,在服務(wù)端用request.getParameter("name")時(shí)返回的往往是亂碼。按以上的做法設(shè)置Filter沒有用,用request.setCharacterEncoding("gbk")的方式,仍然不管用。
                例如,建立test2.jsp文件,內(nèi)容為:

    <%@ 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>你輸入的內(nèi)容為:<%=str%><br>
          
    <form action="test.jsp" method="post">
             
    <a href="test2.jsp?chStr=中文">點(diǎn)擊這里提交中文參數(shù)</a>
          
    </form>
          
    </body>
    </html>

          運(yùn)行后,可見通過URL傳遞的中文參數(shù)取出來過后變成了亂碼,造成這種結(jié)果的原因是Tomcat中以get方式提交的請(qǐng)求對(duì)query-string處理時(shí)采用了和post方法不一樣的處理方式。
          解決這個(gè)問題的方法是打開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"
       />


          4.數(shù)據(jù)庫(kù)訪問時(shí)的亂碼問題

          在建立數(shù)據(jù)庫(kù)時(shí),將數(shù)據(jù)庫(kù)中的所有表的編碼方式都設(shè)置為gbk,原因是JSP中也使用了gbk編碼,這樣統(tǒng)一的結(jié)果是可以減少很多不必要的編碼轉(zhuǎn)換問題。另外,在使用JDBC連接MySQL數(shù)據(jù)庫(kù)時(shí),連接字符串寫成如下形式可以避免一些中文問題:

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

          如果是以數(shù)據(jù)源的方式連接數(shù)據(jù)庫(kù),在配置文件中使用:
    <parameter>
    <name>url</name>
    <value>
    jdbc://mysql://hostname:port/DBname?
    &useUnicode=True&characterEncoding=gbk
    </value>
    </parameter>

          但是,如果使用一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的編碼方式是ISO-8859-1,而Web應(yīng)用中使用UTF-8,且數(shù)據(jù)庫(kù)中已經(jīng)有很多重要信息,因此不能通過更改數(shù)據(jù)庫(kù)的編碼方式來解決問題。這個(gè)時(shí)候,在往數(shù)據(jù)庫(kù)中寫數(shù)據(jù)庫(kù)時(shí),一定要在JDBC連接字符串中加入“useUnicode=True&characterEncoding=ISO-8859-1”,這樣可以順利的往數(shù)據(jù)庫(kù)中寫入正常的數(shù)據(jù)。但是,在將數(shù)據(jù)讀出數(shù)據(jù)庫(kù)時(shí),亂碼又會(huì)出現(xiàn),這個(gè)時(shí)候就應(yīng)該在數(shù)據(jù)取出時(shí)對(duì)其轉(zhuǎn)碼,可以將轉(zhuǎn)碼功能寫為一個(gè)函數(shù),具體實(shí)現(xiàn)如下:
    public String charConvert(String src){
          String result
    =null;
       
    if(src!=null){
       
    try{
             result
    =new String(src.getBytes("ISO=8859-1"),"gbk");
          }
    catch(Exception e)
       
    {
                result
    =null;
                }

          }

          
    return result; 
    }
          于是,在從數(shù)據(jù)庫(kù)讀出數(shù)據(jù)過后調(diào)用charConvert(rs.getString("colName")),這樣就可以正常顯示數(shù)據(jù)庫(kù)中的中文數(shù)據(jù)了。

    Feedback

    # re: 如何處理中文亂碼問題[未登錄]  回復(fù)  更多評(píng)論   

    2007-09-20 13:12 by p
    謝謝!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-12 16:06 by sunway
    呵呵,你的親老公來過!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 08:48 by sunway
    在我想起你無法控制的時(shí)候,我就到這來發(fā)泄吧!希望在這里能夠越寫越少!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 08:50 by sunway
    反正你也看不到,看我能不能自己把它頂成大長(zhǎng)帖,看看到底能有多長(zhǎng)。

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 09:00 by sunway
    是不是被詛咒了?永遠(yuǎn)都是到最后一步失敗?

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 09:32 by sunway
    我想回家

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 11:30 by sunway
    如果上天能把你還給我該多好,我感覺就像在演電影,你被下了魔法,使整個(gè)人改變了。

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 13:40 by sunway
    小兔子,呵呵,跑起來真可愛!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 13:49 by sunway
    在這里,心情就好一點(diǎn),仿佛看到你一樣

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 13:51 by sunway
    老婆,真希望永遠(yuǎn)可以這么稱呼,好久沒有看到溫柔的你了。懷念.......

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 14:19 by sunway
    女人的心好奇怪,過了一次火焰山,又溜達(dá)到北極了!能跑回赤道也行啊!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 14:52 by sunway
    好想和你說話,給你寫信,我怕更糟糕,更讓你煩,該怎么辦呢。

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 15:29 by sunway
    我還是鼓起勇氣寫了,不知道你會(huì)不會(huì)仔細(xì)的看完,體會(huì)我的真心!我最擔(dān)心的是你把這里也封了,那我一個(gè)靠岸的地方都沒有了!

    上帝啊!我也做了那面多好事,你也幫我一次!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 20:04 by sunway
    每個(gè)人都要為自己做的錯(cuò)事付出代價(jià),這話是真的,但是老天爺啊,你能給我這次機(jī)會(huì)嗎?我已經(jīng)知道錯(cuò)了,這次的懲罰對(duì)我來說太大了,我根本受不了啊,求您了,寬恕我這次吧!我愿意減壽10年,別讓她離開我。

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 20:07 by sunway
    離回去還有12天,對(duì)我來說那就是12年,時(shí)間快點(diǎn)過吧!不要讓我心愛的人選擇放棄!千萬不要啊!我會(huì)用我的全部來彌補(bǔ)我的過失,除了她。

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-21 21:36 by sunway
    你的每一句話,都在我心里回蕩,酸,疼,后悔,害怕。12天,千萬要經(jīng)的住考驗(yàn)?zāi)兀页藫?dān)心,一點(diǎn)力都用不上!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-22 09:07 by sunway
    寶貝,票很難買啊,我很早就定著了,今天就可以定1號(hào)的票了,正規(guī)途徑是買不到了,我在聯(lián)系黃牛,無論如何我都要回去和你團(tuán)聚!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-22 11:45 by sunway
    寶貝,我吃飯去了,你也要照顧好自己,等回去了,我就會(huì)全身心的照顧你了,嘿嘿!還得找票,真難買啊!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-22 13:46 by sunway
    大盤跌的好厲害,人都說情場(chǎng)失意,賭場(chǎng)得意,看來我真的是受到了懲罰,雙失意。

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-22 16:52 by sunway
    不行了,腦袋不停的想,看著書,可腦袋里卻想著怎么能讓你回頭,就沒有更好的辦法了嗎?

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-22 21:54 by sunway
    原來變了心是這么的無情,我用100%的心寫了我所有的想法,還是無動(dòng)于衷,難道再也找不回來了嗎?他是誰呀,我真是對(duì)他佩服的五體投地。到底發(fā)生過什么呢?短短幾次,我就變成了不值錢的塵土。

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-23 09:06 by sunway
    寶貝,早上好,票還沒定到,真著急啊!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-23 09:23 by sunway
    老婆,回頭吧!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-23 11:26 by sunway
    還沒買到票呢,寶貝,一定要保佑我順利回去,我一定要看到你!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-24 08:36 by sunway
    老婆,早上好,昨天很晚睡覺,今天一定起來很困吧!晚上進(jìn)去寢室了嗎?你和樓下的說一下吧,有時(shí)候加班會(huì)很晚回去。

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-24 13:46 by sunway
    也不知道你會(huì)看到這里嗎?親愛的,時(shí)間快快過吧,早點(diǎn)回去看到你,再也不分開。

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-24 15:45 by sunway
    又想你想的不行了,一直在想做什么能讓你高興,能讓你回來呢,我現(xiàn)在想到了四件大事,我已經(jīng)努力了兩件了,不過有一件太有難度了,而且需要很長(zhǎng)時(shí)間,還可能辦不成,我苦苦的求我叔,終于被我感動(dòng)愿意再幫我試試,另一件應(yīng)該能辦好吧,希望在我回去之前能辦好,最后兩件只有我親自能辦了,也不知道老婆能不能給我這個(gè)機(jī)會(huì)了。老婆,我愛你!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-24 20:01 by sunway
    老婆,你每天都在干什么呢?我很想你,每天這個(gè)時(shí)候我都在給你寫信,都在想你,你能感覺到我的思念嗎?

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-25 08:44 by sunway
    老婆,早上好,我在這里就好像能和你說話一樣,記得想我啊!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-25 14:46 by sunway
    好高興啊,和你說話了,哈哈。吃蜂蜜都沒這么甜!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-25 16:35 by sunway
    親愛的,我的宿舍到期了,不讓我住,真鬧心,我現(xiàn)在是賴著不走啊,等熬過下周我就回去了,呵呵,保佑我一定要賴過去啊!嘎嘎!親親!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-25 18:47 by sunway
    老婆,我去吃飯了,你在學(xué)校一定要吃好飯呢,就怕你省錢,回去我都給老婆報(bào),老婆一定要吃好啊!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-26 10:36 by sunway
    老婆,早上好,你今天在加班,真辛苦,我都不敢打擾你,等你累了一定要給我打電話放松一下啊!555我在這寫的你也看不到!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-26 12:11 by sunway
    老婆,你又不理我,回一個(gè)信息也行啊555,臭老婆,不知道想你呢!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-27 17:27 by sunway
    寶貝,很快就見到你了,希望經(jīng)過這次,我們能合好如初,然后更加好!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-28 08:45 by sunway
    老婆,早上好!心情很低落,不想影響到你,其實(shí)是你影響到我!

    加油!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-28 13:31 by sunway
    老婆,我又來看你了,每天你都很忙,我會(huì)用心支持你的。不要很累,有些東西你要想開啊!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-28 16:53 by sunway
    記住這歷史性的一刻,老婆近期第一次和我說話就是在10分鐘前,說也很想我回去,但結(jié)果未卜啊,即使我最后失敗了,我也會(huì)愛護(hù)你的,老婆,今天真的很感謝你!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-29 09:07 by sunway
    寶貝,早上好!我來了,嘎嘎!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-01-30 08:44 by sunway
    親愛的,昨天開集團(tuán)大會(huì),就早上打了招呼,老婆贖罪,先給您請(qǐng)安了!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-02-17 23:40 by sunway
    老婆,今天的日子我又來了,希望我能為我以前的過失贖罪,我是罪人,我痛恨我自己,我也不會(huì)原諒我自己!

    # 感謝  回復(fù)  更多評(píng)論   

    2008-06-02 15:51 by 感謝
    十分的感謝!!!!!

    # re: 如何處理中文亂碼問題  回復(fù)  更多評(píng)論   

    2008-10-14 21:05 by 11
    垃圾老公

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本特黄特色aa大片免费| 中文在线观看免费网站| 亚洲性无码AV中文字幕| 亚洲国产精品白丝在线观看| 亚洲美女激情视频| 亚洲国产精品成人综合色在线婷婷| 亚洲乱亚洲乱淫久久| 亚洲免费在线视频| 亚洲黄色三级视频| 亚洲国产视频网站| 久久夜色精品国产噜噜亚洲a| 亚洲一区二区三区免费视频| 亚洲kkk4444在线观看| 亚洲男人的天堂网站| 国产成人亚洲综合无| 免费精品国产自产拍在线观看 | yy6080久久亚洲精品| 免费人成网站在线高清 | 99爱免费观看视频在线| 69视频在线是免费观看| 国产大片线上免费观看| 四虎永久在线免费观看| 亚洲区不卡顿区在线观看| 亚洲日韩精品无码专区网址| 久久综合九九亚洲一区| 亚洲av无码片在线观看| 亚洲Aⅴ在线无码播放毛片一线天| 国产精品久久亚洲一区二区| 搡女人免费免费视频观看| 久久不见久久见免费视频7| 成人午夜大片免费7777| 国产L精品国产亚洲区久久| 亚洲AV无码久久精品色欲| 中文日韩亚洲欧美制服| 免费人成视频在线播放| 亚欧免费一级毛片| 国产麻豆剧传媒精品国产免费| 亚洲乱码一区二区三区在线观看| 91亚洲国产成人精品下载| 亚洲AV无码AV男人的天堂不卡| 中文字幕a∨在线乱码免费看 |