<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) 評論(43)  編輯  收藏 所屬分類: Java

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

          1.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);
    %>


          2.獲取表單提交的數據時的中文亂碼問題

          在沒有加任何其他處理之前,用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>


          3.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"
       />


          4.數據庫訪問時的亂碼問題

          在建立數據庫時,將數據庫中的所有表的編碼方式都設置為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{
             result
    =new String(src.getBytes("ISO=8859-1"),"gbk");
          }
    catch(Exception e)
       
    {
                result
    =null;
                }

          }

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

    Feedback

    # re: 如何處理中文亂碼問題[未登錄]  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

    2008-01-21 21:36 by sunway
    你的每一句話,都在我心里回蕩,酸,疼,后悔,害怕。12天,千萬要經的住考驗呢,我除了擔心,一點力都用不上!

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    加油!

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

    2008-01-30 08:44 by sunway
    親愛的,昨天開集團大會,就早上打了招呼,老婆贖罪,先給您請安了!

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    # 感謝  回復  更多評論   

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

    # re: 如何處理中文亂碼問題  回復  更多評論   

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

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产免费私拍一区二区三区| 337p日本欧洲亚洲大胆裸体艺术| 亚洲精品女同中文字幕| 免费大黄网站在线观| 免费无码黄网站在线看| 亚洲国产成人综合| 亚洲精品tv久久久久久久久久| 久久国产精品免费观看| 女bbbbxxxx另类亚洲| 国产成人精品日本亚洲| 成人五级毛片免费播放| 中国黄色免费网站| 亚洲专区中文字幕| 国产亚洲色婷婷久久99精品91| 午夜国产精品免费观看 | 久久久无码精品亚洲日韩京东传媒 | 亚洲日本在线播放| 一区二区三区亚洲视频| 在线日本高清免费不卡| 老司机福利在线免费观看| 亚洲福利在线视频| 免费乱理伦在线播放| 19禁啪啪无遮挡免费网站| 又黄又大的激情视频在线观看免费视频社区在线 | 日韩伦理片电影在线免费观看| 精品视频在线免费观看| 无码天堂va亚洲va在线va| 亚洲欧洲日韩国产| 亚洲精品tv久久久久久久久| 日韩激情淫片免费看| 91精品成人免费国产片| A级毛片成人网站免费看| 亚洲成a人片在线不卡一二三区| 亚洲综合精品一二三区在线| 亚洲国产天堂久久综合| 免费毛片网站在线观看| 97性无码区免费| 91人人区免费区人人| 两个人看的www免费| 九一在线完整视频免费观看| 亚洲综合欧美色五月俺也去|