<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,而中國人通常使用的文件和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頁面制定顯示字符的編碼方式,解決問題如下:

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

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

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

    <%
          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ì)所有頁面的請(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ù)庫訪問時(shí)的亂碼問題

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

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

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

          但是,如果使用一個(gè)已經(jīng)存在的數(shù)據(jù)庫,數(shù)據(jù)庫的編碼方式是ISO-8859-1,而Web應(yīng)用中使用UTF-8,且數(shù)據(jù)庫中已經(jīng)有很多重要信息,因此不能通過更改數(shù)據(jù)庫的編碼方式來解決問題。這個(gè)時(shí)候,在往數(shù)據(jù)庫中寫數(shù)據(jù)庫時(shí),一定要在JDBC連接字符串中加入“useUnicode=True&characterEncoding=ISO-8859-1”,這樣可以順利的往數(shù)據(jù)庫中寫入正常的數(shù)據(jù)。但是,在將數(shù)據(jù)讀出數(shù)據(jù)庫時(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ù)庫讀出數(shù)據(jù)過后調(diào)用charConvert(rs.getString("colName")),這樣就可以正常顯示數(shù)據(jù)庫中的中文數(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
    反正你也看不到,看我能不能自己把它頂成大長帖,看看到底能有多長。

    # 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á)到北極了!能跑回赤道也行?。?/div>

    # 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
    大盤跌的好厲害,人都說情場失意,賭場得意,看來我真的是受到了懲罰,雙失意。

    # 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
    寶貝,早上好,票還沒定到,真著急?。?/div>

    # 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)努力了兩件了,不過有一件太有難度了,而且需要很長時(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)航:
     
    主站蜘蛛池模板: 老司机午夜在线视频免费观| 亚洲AV日韩精品久久久久久久| 男女交性永久免费视频播放| 最近免费中文字幕大全视频 | 亚洲精品国产日韩无码AV永久免费网| 国产午夜亚洲精品不卡免下载| 国产精品亚洲精品日韩电影| 污视频网站在线观看免费| 一个人看的在线免费视频| 亚洲免费无码在线| 日本免费久久久久久久网站| 色欲国产麻豆一精品一AV一免费| 久久99精品视免费看| 毛片免费全部播放无码| 国产在线a免费观看| 香蕉高清免费永久在线视频| 在线观看国产情趣免费视频| 亚洲国产精品专区在线观看| 久久影院亚洲一区| 香蕉蕉亚亚洲aav综合| 亚洲国产精品午夜电影| 亚洲精品国产首次亮相 | 久久夜色精品国产噜噜噜亚洲AV| 精品日韩亚洲AV无码| 亚洲最大福利视频| 美女免费精品高清毛片在线视| 国产99久久久久久免费看| 一级毛片aaaaaa免费看| AV片在线观看免费| 亚洲精品无码久久久| 亚洲Av熟妇高潮30p| 亚洲男人天堂2022| 免费视频成人国产精品网站| 免费无码作爱视频| www.999精品视频观看免费| 亚洲?v女人的天堂在线观看| 亚洲va无码va在线va天堂| 亚洲人成7777| 中文在线观看永久免费| 麻豆国产精品免费视频| mm1313亚洲精品无码又大又粗|