亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Java中文相關技術

瀏覽:2日期:2024-06-22 09:17:13
內容: 在應用開發的過程中,總會遇到一些“難以理解的系統缺陷和“不易解決的問題。其實,通過認真分析,不必購買昂貴的產品依然可以解決多數問題。■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加上。為了處理含有英文字符的中文字串,對英文字符則需要加上一個Byte 0標記。以下提供的兩個公用靜態方法,可加入任何一個類中使用。將中英文字串轉換成純英文字串public static String toTureAsciiStr(String str){StringBuffer sb = new StringBuffer();byte[] bt = str.getBytes();for(int i =0 ;i〈btelse{//是英文字符 補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下調試完全正常的Servlet,上傳到Solaris 服務器上,運行卻出現故障——返回的網頁不能顯示中文,應為中文的信息全為亂碼;用中文信息做關鍵字,不能正確檢索數據庫。后來采用加入檢查代碼等方法探知故障原因如下:顯示亂碼主要是因為通過類 HttpServletResponse提供的方法setContentType 無法改變返回給客戶的數據的編碼方式,正確的編碼方式應為GB2312或者GBK,而事實上為缺省的ISO8859-1。無法檢索中文信息則是因為,客戶提交的中文信息經瀏覽器編碼到達服務器后,Servlet無法將其正確解碼。舉例說明顯示亂碼解決方法Servlet 一般通常做法如下:public class ZldTestServlet extends HttpServlet {public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{//在使用 Writer向瀏覽器返回數據前,設置 content-type header ,在這里設置相應的字符集gb2312response.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.getOutputStream(),'gb2312'));Solaris中文信息檢索問題的解決瀏覽器利用表單向服務器提交信息時,一般采用x-www-form-urlencoded 的MIME格式對數據進行編碼。如果使用get方法,參數名稱和參數值經編碼后附加在URL后,在Java中稱作查詢串(query string)。在Servlet程序中,如果采用ServletRequest的方法getParameter取得參數值,在Solaris環境下,對漢字卻不能正確解碼。因而無法正確檢索數據庫。在Java 1.2的包——java.net中提供了URLEncode和URLDecode類。類URLEncode提供了按x-www-form-urlencoded格式對給定串進行轉換的方法。類URLEncode則提供了逆方法。在編寫某網上114查詢的Servlet時,采用先取得查詢串,再利用類URLDecode解碼,再從解碼后的串中取得參數,很好地解決了Solrais環境下,中文信息檢索的問題。源代碼就不在這里給出了,如果需要請和筆者聯系。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關文章:
主站蜘蛛池模板: 91最新视频在线观看 | 久久伊人草 | 欧美一进一出 | 国产成人综合欧美精品久久 | 欧美精品中出 | 欧美色影视| 韩国日本一级毛片免费视频 | 免费高清成人啪啪网站 | α片毛片| 亚洲最新视频在线观看 | 亚洲美女自拍视频 | 欧美在线观看视频一区 | 三级网址在线播放 | 久久久这里只有精品加勒比 | 999国内精品永久免费视频 | 台湾成人性视频免费播放 | 成人黄18免费视频 | 男女激情视频国产免费观看 | 妞干网免费在线 | 拍拍拍拍拍拍拍无挡大全免费 | 青草视频在线免费观看 | 中文字幕一区二区在线观看 | 黄色天堂网站 | 国产精品一区在线免费观看 | 大美女久久久久久j久久 | 精品视频在线观看你懂的一区 | 国产a一级毛片含羞草传媒 国产a三级三级三级 | 免费黄色在线网站 | 国产精品偷伦视频免费手机播放 | 欧美毛片免费看 | 男女啪啪免费体验区 | 国产视频日韩 | 天天色国产 | 亚洲欧美精品在线 | 国产一级第一级毛片 | 亚洲国产高清精品线久久 | 国产在线激情视频 | 久久精品人人做人人爽 | 毛片免费全部完整播放 | 国产综合成人亚洲区 | 农村寡妇一级毛片免费播放 |