• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    在JAVA開發中的中文處理問題及解決辦法

    發布: 2007-6-08 17:29 | 作者: 網絡轉載 | 來源: 網絡 | 查看: 62次 | 進入軟件測試論壇討論

    領測軟件測試網 在應用開發的過程中,總會遇到一些“難以理解”的系統缺陷和“不易解決”的問
    題。其實,通過認真分析,不必購買昂貴的產品依然可以解決多數問題。
      ■JDBC ODBC Bridge的Bug及其解決方法
      在編寫一數據庫管理程序時,發現JDBC-ODBC Bridge存在不易發現的Bug。在向數據
    表插入數據時,如果為英文字符,存儲內容完全正確,如果存入中文字符,部分數據庫
    只能存儲前七八個中文字符,其他內容被截去,導致存儲內容的不完整(有些數據庫不
    存在這個問題,如Sybase SQL Anywhere 5.0。JDBC-ODBC Bridge還存在無法建表的Bug
    )。
      對于廣大需要存儲中文信息的Java程序員來說,這可是一個不好的消息。要么改用
    其他語言編程,要么選擇其他價格昂貴的數據庫產品!耙淮尉帉,到處運行”的目標
    ,也大打折扣。能不能采用變通的方法,將中文信息進行處理后再存儲來解決這個問題
    呢?答案是肯定的。
      解決問題的具體思路、方法
      Java采用Unicode碼編碼方式,中英文字符均采用16bit存儲。既然存儲英文信息是
    正確的,根據一定規則,將中文信息轉換成英文信息后存儲,自然不會出現截尾現象。
    讀取信息時再進行逆向操作,將英文信息還原成中文信息即可。由GB2312編碼規則可知
    ,漢字一般為二個高位為1的ASCII碼,在轉換時將一個漢字的二個高位1去掉,還原時再
    將二個高位1加上。為了處理含有英文字符的中文字串,對英文字符則需要加上一個Byt
    e 0標記。以下提供的兩個公用靜態方法,可加入任何一個類中使用。
      將中英文字串轉換成純英文字串
      public static String toTureAsciiStr(String str){
      StringBuffer sb = new StringBuffer();
      byte[] bt = str.getBytes();
      for(int i =0 ;i〈bt.length;i++){
      if(bt[i]〈0){
      //是漢字去高位1
      sb.append((char)(bt[i]&&0x7f));
       }else{//是英文字符 補0作記錄
      sb.append((char)0);
      sb.append((char)bt[i]);
       }
       }
      return sb.toString();
      }
      將經轉換的字串還原
      public static String unToTrueAsciiStr(String str){
       byte[] bt = str.getBytes();
       int i,l=0,length = bt.length,j=0;
       for(i = 0;i〈length;i++){
       if(bt[i] == 0){
       l++;
       }
       }
       byte []bt2 = new byte[length-l];
       for(i =0 ;i〈length;i++){
       if(bt[i] == 0){
       i++;
       bt2[j] = bt[i];
       }else{
       bt2[j] = (byte)(bt[i]|0x80);
       }
       j++;
       }
      String tt = new String(bt2);
      return tt;
      }
      上例在實際編程中效果很好,只是存儲的中文信息需要經過同樣處理,才能被其他
    系統使用。而且如果中文字串出現英文字符,實際上增加了額外的存儲空間。
      ■Solaris下Servlet編程的中文問題及解決辦法
      在使用Java開發Inte.net上的一個應用系統時,發現在Windows下調試完全正常的S
    ervlet,上傳到Solaris 服務器上,運行卻出現故障——返回的網頁不能顯示中文,應
    為中文的信息全為亂碼;用中文信息做關鍵字,不能正確檢索數據庫。后來采用加入檢
    查代碼等方法探知故障原因如下:
      顯示亂碼主要是因為通過類 HttpServletResponse提供的方法setContentType 無法
    改變返回給客戶的數據的編碼方式,正確的編碼方式應為GB2312或者GBK,而事實上為缺
    省的ISO8859-1。無法檢索中文信息則是因為,客戶提交的中文信息經瀏覽器編碼到達服
    務器后,Servlet無法將其正確解碼。
      舉例說明顯示亂碼解決方法
      Servlet 一般通常做法如下:
      public class ZldTestServlet extends HttpServlet {
      public void doGet (HttpServletRequest request,HttpServletResponse respon
    se)throws ServletException, IOException{
      //在使用 Writer向瀏覽器返回數據前,設置 content-type header ,在這里設置
    相應的字符集gb2312
      response.setContentType("text/html;charset=gb2312");
      PrintWriter out = response.getWriter(); //*
      // 正式返回數據
      out.println("〈html〉〈head〉〈title〉Servlet test〈/title〉〈/head〉" )
    ;
      out.println("這是一個測試頁!");
      out.println("〈/body〉〈/html〉");
      out.close();
      }
       ...
      }
      解決頁面顯示亂碼問題,需將*處代碼換成如下內容:
      PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOut
    putStream(),"gb2312"));
      Solaris中文信息檢索問題的解決
      瀏覽器利用表單向服務器提交信息時,一般采用x-www-form-urlencoded 的MIME格
    式對數據進行編碼。如果使用get方法,參數名稱和參數值經編碼后附加在URL后,在Ja
    va中稱作查詢串(query string)。
      在Servlet程序中,如果采用ServletRequest的方法getParameter取得參數值,在S
    olaris環境下,對漢字卻不能正確解碼。因而無法正確檢索數據庫。
      在Java 1.2的包——java.net中提供了URLEncode和URLDecode類。類URLEncode提供
    了按x-www-form-urlencoded格式對給定串進行轉換的方法。類URLEncode則提供了逆方
    法。
      在編寫某網上114查詢的Servlet時,采用先取得查詢串,再利用類URLDecode解碼,
    再從解碼后的串中取得參數,很好地解決了Solrais環境下,中文信息檢索的問題。源代
    碼就不在這里給出了,如果需要請和筆者聯系。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: java 處理 解決 開發 問題 中文 辦法


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>