亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 12:11:40
字體:
來源:轉載
供稿:網友

  在應用開發的過程中,總會碰到一些“難以理解”的系統缺陷和“不易解決”的問
  題。其實,通過認真分析,不必購買昂貴的產品依然可以解決多數問題。
    ■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開發Internet上的一個應用系統時,發現在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環境下,中文信息檢索的問題?! ≡趹瞄_發的過程中,總會碰到一些“難以理解”的系統缺陷和“不易解決”的問
  題。其實,通過認真分析,不必購買昂貴的產品依然可以解決多數問題。
    ■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開發Internet上的一個應用系統時,發現在Windows下調試完全正常的S
  ervlet,上傳到Solaris 服務器上,運行卻出現故障——返回的網頁不能顯示中文,應
  為中文的信息全為亂碼;用中文信息做要害字,不能正確檢索數據庫。后來采用加入檢
  查代碼等方法探知故障原因如下:
    顯示亂碼主要是因為通

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
另类专区欧美制服同性| 精品视频在线播放色网色视频| 国产欧美一区二区三区久久人妖| 亚洲精品成人久久| 亚洲欧美成人在线| 久99久在线视频| 亚洲综合日韩中文字幕v在线| 欧美一区二区三区精品电影| 亚洲欧美综合图区| 国产伦精品一区二区三区精品视频| 成人免费直播live| 亚洲激情中文字幕| 中文字幕av一区中文字幕天堂| 亚洲毛片一区二区| 欧美极品少妇xxxxⅹ免费视频| 91久久久久久久| 欧美噜噜久久久xxx| 成人国产精品久久久久久亚洲| 国产剧情久久久久久| 精品国产精品三级精品av网址| 国产成人黄色av| 国产乱人伦真实精品视频| 国产精品爽黄69天堂a| 久久在线免费视频| 亚洲国产成人久久综合一区| 欧美日韩美女视频| 亚洲国产中文字幕久久网| 成人黄色大片在线免费观看| 精品亚洲一区二区三区四区五区| 国产精品99久久久久久人| 欧美视频精品一区| 欧美亚洲日本网站| www.99久久热国产日韩欧美.com| 国产精品白丝jk喷水视频一区| 亚洲免费精彩视频| 成人黄色av网| 久久久久久久一| 久久久久久久999精品视频| 美女av一区二区三区| 日韩在线视频中文字幕| 国产一区二区日韩精品欧美精品| 日韩美女免费线视频| 91精品国产91久久久久久不卡| 欧美国产精品人人做人人爱| 久久色在线播放| 精品精品国产国产自在线| 亚州精品天堂中文字幕| 日韩一区二区三区国产| 98午夜经典影视| 国产91网红主播在线观看| 亚洲欧美国产日韩中文字幕| 日韩中文第一页| 日韩在线不卡视频| 精品国产一区二区三区久久| 亚洲xxxx妇黄裸体| 尤物yw午夜国产精品视频| 91免费在线视频| 欧美www视频在线观看| 国产成人jvid在线播放| 最近2019中文字幕在线高清| 中文字幕一区二区三区电影| 国内精品免费午夜毛片| 国产美女久久精品香蕉69| 亚洲美女视频网| 日韩美女av在线免费观看| 91精品在线观看视频| 亚洲天堂免费观看| 亚洲xxxx在线| 九九九热精品免费视频观看网站| 中文字幕免费精品一区高清| 精品国产一区久久久| 亚洲乱亚洲乱妇无码| 亚洲欧美成人精品| 亚洲www在线观看| 51色欧美片视频在线观看| 国产97在线|日韩| 热久久视久久精品18亚洲精品| 亚洲精品美女久久| 亚洲一区亚洲二区亚洲三区| 国产精品久久久久久久久影视| 日韩中文字幕视频| 精品一区二区三区四区| 久久99久久99精品免观看粉嫩| 国产成人中文字幕| 亚洲国产福利在线| 狠狠色噜噜狠狠狠狠97| 国产精品va在线| 亚洲国产小视频在线观看| 国产亚洲激情视频在线| 国产suv精品一区二区| 久久国产精品久久精品| 欧美重口另类videos人妖| 欧美成人免费全部观看天天性色| 国产在线视频91| 亚洲天堂开心观看| 国产精品视频在线观看| 久久视频免费在线播放| 亚洲福利在线观看| 亚洲欧美日韩一区在线| 欧美日韩午夜激情| 久热国产精品视频| 欧美一级在线亚洲天堂| 久久视频在线直播| 欧美尺度大的性做爰视频| 久久人人爽人人爽人人片av高请| 国产精品久久久久91| 亚洲欧美激情四射在线日| 成人h视频在线观看播放| 在线成人一区二区| 91九色蝌蚪国产| 国产乱人伦真实精品视频| 日韩成人高清在线| 黑人极品videos精品欧美裸| 亚洲精品视频中文字幕| 国内精品免费午夜毛片| 欧美大码xxxx| 国产亚洲精品一区二区| 最新国产成人av网站网址麻豆| 成人美女免费网站视频| 91精品久久久久久久久| 在线观看亚洲视频| 中文字幕亚洲无线码a| 欧美国产日韩一区| 亚洲欧美在线一区| 久久99国产精品久久久久久久久| 国产一区二区三区中文| 欧美午夜美女看片| 人人做人人澡人人爽欧美| 日韩美女在线播放| 亚洲欧美在线x视频| 91在线视频导航| 国产成人精品久久亚洲高清不卡| 国产欧美va欧美va香蕉在线| 国产精品一区二区av影院萌芽| 国产亚洲视频在线观看| 国产视频精品免费播放| 国产精品7m视频| 亚洲自拍av在线| 国产精品男人爽免费视频1| 亚洲午夜激情免费视频| 性色av一区二区三区| 欧美性极品xxxx做受| 国产精品久久精品| 青青青国产精品一区二区| 国产一区av在线| 26uuu亚洲伊人春色| 亚洲韩国欧洲国产日产av| 久久久999精品免费| 日韩中文字幕在线视频| 亚洲国产91精品在线观看| 精品久久久久久中文字幕大豆网| 国产中文字幕亚洲| 成人免费午夜电影| 97精品国产97久久久久久| 成人av在线亚洲| 成人免费xxxxx在线观看| 国内精品免费午夜毛片| 欧美日韩xxx| 97精品在线视频| 日韩av免费在线看| 国产亚洲欧美日韩美女| 亚洲欧美日韩在线高清直播| 97人人爽人人喊人人模波多| 欧美精品18videos性欧美|