亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? java 編程技術中漢字問題的分析及解決(轉).txt

?? 這是一本很好的Java開發書籍
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
作者:zergman
email: zergman@chinaasp.com
日期:2001-6-15 13:22:02
[BLOCKQUOTE][BLOCKQUOTE][BLOCKQUOTE]
[b]Java 編程技術中漢字問題的分析及解決[/b]
[b][/b][/BLOCKQUOTE][/BLOCKQUOTE][/BLOCKQUOTE]
段明輝
自由撰稿人
2000 年 11月 8日
[TABLE][TR][TD][#ffffff][B]內容:[/B][/#][/TD][/TR][TR][TD][img]http://www.cn.ibm.com/developerWorks/i/c.gif[/img][/TD][/TR][TR][TD][img]http://www.cn.ibm.com/developerWorks/i/c.gif[/img][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/java_chinese/index.shtml#1]漢字編碼的常識[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/java_chinese/index.shtml#2]Java 中文問題的初步認識[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/java_chinese/index.shtml#3]Java 中文問題的表層分析及處理[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/java_chinese/index.shtml#4]Java 中文問題的根源分析及解決[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/java_chinese/index.shtml#5]Java Servlet 中文問題的根源[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/java_chinese/index.shtml#6]修改 Servlet.jar[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/java_chinese/index.shtml#7]中文亂碼的處理函數[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/java_chinese/index.shtml#resources]參考資料[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/java_chinese/index.shtml#author]作者簡介[/url][/TD][/TR][TR][TD][img]http://www.cn.ibm.com/developerWorks/i/c.gif[/img][/TD][/TR][/TABLE]
在基于 Java 語言的編程中,我們經常碰到漢字的處理及顯示的問題。一大堆看不懂的亂碼肯定不是我們愿意看到的顯示效果,怎樣才能夠讓那些漢字正確顯示呢?Java 語言默認的編碼方式是UNICODE ,而我們中國人通常使用的文件和數據庫都是基于 GB2312 或者 BIG5 等方式編碼的,怎樣才能夠恰當地選擇漢字編碼方式并正確地處理漢字的編碼呢?本文將從漢字編碼的常識入手,結合 Java 編程實例,分析以上兩個問題并提出解決它們的方案。

現在 Java 編程語言已經廣泛應用于互聯網世界,早在 Sun 公司開發 Java 語言的時候,就已經考慮到對非英文字符的支持了。Sun 公司公布的 Java 運行環境(JRE)本身就分英文版和國際版,但只有國際版才支持非英文字符。不過在 Java 編程語言的應用中,對中文字符的支持并非如同 Java Soft 的標準規范中所宣稱的那樣完美,因為中文字符集不只一個,而且不同的操作系統對中文字符的支持也不盡相同,所以會有許多和漢字編碼處理有關的問題在我們進行應用開發中困擾著我們。有很多關于這些問題的解答,但都比較瑣碎,并不能夠滿足大家迫切解決問題的愿望,關于 Java 中文問題的系統研究并不多,本文從漢字編碼常識出發,分析 Java 中文問題,希望對大家解決這個問題有所幫助。
[B]漢字編碼的常識[/B] 
我們知道,英文字符一般是以一個字節來表示的,最常用的編碼方法是 ASCII 。但一個字節最多只能區分256個字符,而漢字成千上萬,所以現在都以雙字節來表示漢字,為了能夠與英文字符分開,每個字節的最高位一定為1,這樣雙字節最多可以表示64K格字符。我們經常碰到的編碼方式有 GB2312、BIG5、UNICODE 等。關于具體編碼方式的詳細資料,有興趣的讀者可以查閱相關資料。我膚淺談一下和我們關系密切的 GB2312 和 UNICODE。GB2312 碼,中華人民共和國國家標準漢字信息交換用編碼,是一個由中華人民共和國國家標準總局發布的關于簡化漢字的編碼,通行于中國大陸地區及新加坡,簡稱國標碼。兩個字節中,第一個字節(高字節)的值為區號值加32(20H),第二個字節(低字節)的值為位號值加32(20H),用這兩個值來表示一個漢字的編碼。UNICODE 碼是微軟提出的解決多國字符問題的多字節等長編碼,它對英文字符采取前面加“0”字節的策略實現等長兼容。如 “A” 的 ASCII 碼為0x41,UNICODE 就為0x00,0x41。利用特殊的工具各種編碼之間可以互相轉換。
[B]Java 中文問題的初步認識[/B] 
我們基于 Java 編程語言進行應用開發時,不可避免地要處理中文。Java 編程語言默認的編碼方式是 UNICODE,而我們通常使用的數據庫及文件都是基于 GB2312 編碼的,我們經常碰到這樣的情況:瀏覽基于 JSP 技術的網站看到的是亂碼,文件打開后看到的也是亂碼,被 Java 修改過的數據庫的內容在別的場合應用時無法繼續正確地提供信息。 
String sEnglish = “apple”; 
String sChinese = “蘋果”; 
String s = “蘋果 apple ”; 
sEnglish 的長度是5,sChinese的長度是4,而 s 默認的長度是14。對于 sEnglish來說, Java 中的各個類都支持得非常好,肯定能夠正確顯示。但對于 sChinese 和 s 來說,雖然 Java Soft 聲明 Java 的基本類已經考慮到對多國字符的支持(默認 UNICODE 編碼),但是如果操作系統的默認編碼不是 UNICODE ,而是國標碼等。從 Java 源代碼到得到正確的結果,要經過 “Java 源代碼-> Java 字節碼-> ;虛擬機->操作系統->顯示設備”的過程。在上述過程中的每一步驟,我們都必須正確地處理漢字的編碼,才能夠使最終的顯示結果正確。 
“ Java 源代碼-> Java 字節碼”,標準的 Java 編譯器 javac 使用的字符集是系統默認的字符集,比如在中文 Windows 操作系統上就是 GBK ,而在 Linux 操作系統上就是ISO-8859-1,所以大家會發現在 Linux 操作系統上編譯的類中源文件中的中文字符都出了問題,解決的辦法就是在編譯的時候添加 encoding 參數,這樣才能夠與平臺無關。用法是 
javac –encoding GBK。 
“ Java 字節碼->虛擬機->操作系統”, Java 運行環境 (JRE) 分英文版和國際版,但只有國際版才支持非英文字符。 Java 開發工具包 (JDK) 肯定支持多國字符,但并非所有的計算機用戶都安裝了 JDK 。很多操作系統及應用軟件為了能夠更好的支持 Java ,都內嵌了 JRE 的國際版本,為自己支持多國字符提供了方便。 
“操作系統->顯示設備”,對于漢字來說,操作系統必須支持并能夠顯示它。英文操作系統如果不搭配特殊的應用軟件的話,是肯定不能夠顯示中文的。 
還有一個問題,就是在 Java 編程過程中,對中文字符進行正確的編碼轉換。例如,向網頁輸出中文字符串的時候,不論你是用 
out.println(string);       // string 是含中文的字符串 
還是用 
<%=string%>,都必須作 UNICODE 到 GBK 的轉換,或者手動,或者自動。在 JSP 1.0中,可以定義輸出字符集,從而實現內碼的自動轉換。用法是 
<%@page ContentType=”text/html;charset=gb2312” %> 
但是在一些 JSP 版本中并沒有提供對輸出字符集的支持,(例如 JSP 0.92),這就需要手動編碼輸出了,方法非常多。最常用的方法是 
String s1 = request.getParameter(“keyword”); 
String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”); 
getBytes 方法用于將中文字符以“ISO-8859-1”編碼方式轉化成字節數組,而“GBK” 是目標編碼方式。我們從以ISO-8859-1方式編碼的數據庫中讀出中文字符串 s1 ,經過上述轉換過程,在支持 GBK 字符集的操作系統和應用軟件中就能夠正確顯示中文字符串 s2 。 
[B]Java 中文問題的表層分析及處理[/B] [TABLE][TR][TD]
背景 [/TD][/TR][TR][TD]
開發環境 [/TD][TD]
JDK1.15 [/TD][TD]
Vcafe2.0 [/TD][TD]
JPadPro [/TD][/TR][TR][TD]
服務器端 [/TD][TD]
NT IIS [/TD][TD]
Sybase System [/TD][TD]
Jconnect(JDBC) [/TD][/TR][TR][TD]
客戶端 [/TD][TD]
IE5.0 [/TD][TD]
Pwin98 [/TD][TD]
  [/TD][/TR][/TABLE]
.CLASS 文件存放在服務器端,由客戶端的瀏覽器運行 APPLET , APPLET 只起調入 FRAME 類等主程序的作用。界面包括 Textfield ,TextArea,List,Choice 等。 
I.       取中文 
用 JDBC 執行 SELECT 語句從服務器端讀取數據(中文)后,將數據用 APPEND 方法加到 TextArea(TA) ,不能正確顯示。但加到 List 中時,大部分漢字卻可正確顯示。 
將數據按“ISO-8859-1” 編碼方式轉化為字節數組,再按系統缺省編碼方式 (Default Character Encoding) 轉化為 STRING ,即可在 TA 和 List 中正確顯示。 
程序段如下: 
dbstr2 = results.getString(1); 
//After reading the result from DB server,converting it to string. 
dbbyte1 = dbstr2.getBytes(“iso-8859-1”); 
dbstr1 = new String(dbbyte1); 
在轉換字符串時不采用系統默認編碼方式,而直接采用“ GBK” 或者 “GB2312” ,在 A 和 B 兩種情況下,從數據庫取數據都沒有問題。 
II.    寫中文到數據庫 
處理方式與“取中文”相逆,先將 SQL 語句按系統缺省編碼方式轉化為字節數組,再按“ISO-8859-1”編碼方式轉化為 STRING ,最后送去執行,則中文信息可正確寫入數據庫。 
程序段如下: 
sqlstmt = tf_input.getText(); 
//Before sending statement to DB server,converting it to sql statement. 
dbbyte1 = sqlstmt.getBytes(); 
sqlstmt = newString(dbbyte1,”iso-8859-1”); 
_stmt = _con.createStatement(); 
_stmt.executeUpdate(sqlstmt); 
…… 
問題:如果客戶機上存在 CLASSPATH 指向 JDK 的 CLASSES.ZIP 時(稱為 A 情況),上述程序代碼可正確執行。但是如果客戶機只有瀏覽器,而沒有 JDK 和 CLASSPATH 時(稱為 B 情況),則漢字無法正確轉換。 
我們的分析: 
1.經過測試,在 A 情況下,程序運行時系統的缺省編碼方式為 GBK 或者 GB2312 。在 B 情況下,程序啟動時瀏覽器的 JAVA 控制臺中出現如下錯誤信息: 
Can't find resource for sun.awt.windows.awtLocalization_zh_CN 
然后系統的缺省編碼方式為“8859-1”。 
2.如果在轉換字符串時不采用系統缺省編碼方式,而是直接采用 “GBK” 或“GB2312”,則在 A 情況下程序仍然可正常運行,在 B 情況下,系統出現錯誤: 
UnsupportedEncodingException。 
3.在客戶機上,把 JDK 的 CLASSES.ZIP 解壓后,放在另一個目錄中, CLASSPATH 只包含該目錄。然后一邊逐步刪除該目錄中的 .CLASS 文件,另一邊運行測試程序,最后發現在一千多個 CLASS 文件中,只有一個是必不可少的,該文件是: 
sun.io.CharToByteDoubleByte.class。 
將該文件拷到服務器端和其它的類放在一起,并在程序的開頭 IMPORT 它,在 B 情況下程序仍然無法正常運行。 
4.在 A 情況下,如果在 CLASSPTH 中去掉 sun.io.CharToByteDoubleByte.class ,則程序運行時測得默認編碼方式為“8859-1”,否則為 “GBK” 或 “GB2312” 。 
如果 JDK 的版本為1.2以上的話,在 B 情況下遇到的問題得到了很好的解決,測試的步驟同上,有興趣的讀者可以嘗試一下。 
[B]Java 中文問題的根源分析及解決[/B] 
在簡體中文 MS Windows 98 + JDK 1.3 下,可以用 System.getProperties() 得到 Java 運行環境的一些基本屬性,類 PoorChinese 可以幫助我們得到這些屬性。 
類 PoorChinese 的源代碼: 
public class PoorChinese { 
   public static void main(String[] args) { 
       System.getProperties().list(System.out); 
   } 
} 
執行 java PoorChinese 后,我們會得到: 
系統變量 file.encoding 的值為 GBK ,user.language 的值為 zh , user.region 的值為 CN ,這些系統變量的值決定了系統默認的編碼方式是 GBK 。 
在上述系統中,下面的代碼將 GB2312 文件轉換成 Big5 文件,它們能夠幫助我們理解 Java 中漢字編碼的轉化: 
  
import java.io.*; 
import java.util.*; 
  
public class gb2big5 { 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久亚洲综合| 自拍视频在线观看一区二区| 国产精品久久久久久久久果冻传媒 | 在线欧美一区二区| 中文无字幕一区二区三区 | 国产精品二区一区二区aⅴ污介绍| 免费黄网站欧美| 国产欧美va欧美不卡在线| 国产成人免费在线观看不卡| 国产精品欧美综合在线| 99久久精品国产麻豆演员表| 国产精品狼人久久影院观看方式| 国产精品 欧美精品| 亚洲精品成人在线| 欧美mv日韩mv国产网站| 国产高清精品久久久久| 一区二区三区不卡视频在线观看 | 99视频有精品| 日韩国产在线观看一区| 国产精品不卡在线观看| 91精品国产一区二区三区蜜臀| 久久99久国产精品黄毛片色诱| 精品成人一区二区三区四区| 91官网在线免费观看| 五月天激情综合| 国产精品久久午夜| 久久影视一区二区| 欧美在线不卡一区| 国产精品888| 精品亚洲国内自在自线福利| 天天综合色天天| 一区二区三区日韩精品视频| 国产色产综合产在线视频| 91精品国产高清一区二区三区| 国产精品乡下勾搭老头1| 麻豆成人综合网| 奇米亚洲午夜久久精品| 一区二区免费看| 中文字幕免费一区| 国产精品网站在线播放| 国产精品欧美一级免费| 2014亚洲片线观看视频免费| 欧美成人三级在线| 精品剧情在线观看| 久久久亚洲精品石原莉奈| 国产亚洲欧洲997久久综合| 久久精品视频一区二区三区| 国产午夜精品福利| 中文字幕巨乱亚洲| 午夜影院在线观看欧美| 久久精品国产77777蜜臀| 成人免费高清视频| 欧美日韩一区三区四区| 日韩欧美一区电影| 中文字幕人成不卡一区| 日韩二区在线观看| 成人中文字幕电影| 91色|porny| 精品国产一二三| 中文字幕日韩精品一区| 日韩高清不卡在线| 91美女在线观看| 精品国产人成亚洲区| 亚洲免费观看高清完整版在线| 日本不卡在线视频| 欧美午夜电影网| 亚洲午夜激情av| www.亚洲激情.com| 久久久一区二区| 激情图片小说一区| 色婷婷综合激情| 国产人伦精品一区二区| 久久草av在线| 久久精品亚洲乱码伦伦中文| 午夜精品久久久久久久99水蜜桃| 不卡av免费在线观看| 久久精品一区二区三区四区| 美女诱惑一区二区| 91精品国产高清一区二区三区蜜臀| 国产精品久久久久久久久免费相片 | 日韩久久久精品| 久久99国产精品尤物| 日韩欧美卡一卡二| 国精产品一区一区三区mba桃花| 精品视频在线免费看| 天天av天天翘天天综合网色鬼国产| 欧美专区在线观看一区| 亚洲图片有声小说| 欧美精品自拍偷拍| 免费成人在线网站| 久久久久成人黄色影片| 99久久婷婷国产精品综合| 一区二区中文字幕在线| 91亚洲国产成人精品一区二区三| 亚洲人成小说网站色在线| 91视频免费看| 精油按摩中文字幕久久| 久久久久久久久97黄色工厂| 91丨porny丨最新| 伊人一区二区三区| 亚洲精品一区二区三区香蕉| 国产精品一色哟哟哟| 天天色天天操综合| 精品久久久久99| 欧美日精品一区视频| 国产一区二区三区四| 日本在线不卡视频| 亚洲欧美日韩在线不卡| 日韩精品在线一区二区| 在线观看视频91| av激情成人网| 国产麻豆精品久久一二三| 日韩国产一二三区| 天天色天天爱天天射综合| 亚洲中国最大av网站| 一区二区三区日韩| 国产精品美女久久久久久2018| 精品国产精品一区二区夜夜嗨| 欧美三级三级三级爽爽爽| 色伊人久久综合中文字幕| 国产精品一区二区黑丝| 国内精品伊人久久久久av影院 | 色婷婷综合久久久| 91视频在线观看| 色婷婷综合久久久久中文一区二区 | 色噜噜狠狠一区二区三区果冻| eeuss鲁片一区二区三区在线看| 国产99久久久久久免费看农村| 狠狠色丁香久久婷婷综合_中 | 欧美福利一区二区| 日韩一区二区三| 国产午夜亚洲精品不卡| 国产精品拍天天在线| 亚洲精品国产精华液| 亚洲在线观看免费视频| 日韩av网站免费在线| 国产成人啪午夜精品网站男同| 日本精品一区二区三区高清 | 日韩电影在线一区二区三区| 国产一区激情在线| 一本色道久久综合亚洲aⅴ蜜桃| av网站一区二区三区| 日韩午夜精品电影| 亚洲影视资源网| 91在线视频观看| 欧美一级专区免费大片| 成人av网址在线观看| 成人一区二区在线观看| 国产一区在线视频| 国产999精品久久久久久绿帽| 成人午夜av电影| 福利电影一区二区三区| 成人av在线资源网站| 成人中文字幕在线| 国产高清不卡一区二区| 中文字幕一区二区日韩精品绯色| 国产经典欧美精品| 国产精品一区二区久久不卡| 在线一区二区三区四区| 日韩美女视频在线| 国产精品国产三级国产aⅴ中文| 欧美一级理论片| 中文字幕 久热精品 视频在线| 麻豆精品视频在线观看| 9i看片成人免费高清| 久草这里只有精品视频| 久久超碰97人人做人人爱| 国产经典欧美精品| 99视频超级精品| 欧美日韩成人综合天天影院| 欧美一级在线视频| 久久久国产午夜精品 | 国产精品麻豆欧美日韩ww| 亚洲激情av在线| 一本大道久久a久久综合婷婷| 欧美mv日韩mv国产网站app| 亚洲精品视频一区| 欧美亚洲国产怡红院影院| 天天综合网天天综合色| 99久久国产综合色|国产精品| 欧美欧美欧美欧美首页| 久久精品人人做人人爽人人| 婷婷国产v国产偷v亚洲高清| 91视频精品在这里| 亚洲一本大道在线| 欧美日韩免费不卡视频一区二区三区| 亚洲乱码国产乱码精品精的特点| 色系网站成人免费| 国产精品白丝jk白祙喷水网站| 国产精品传媒入口麻豆| 欧美日韩免费不卡视频一区二区三区| 高清视频一区二区| 日韩精品色哟哟| 一区二区成人在线| 国产精品卡一卡二卡三| 日韩视频免费直播| 欧美精品第1页| 91行情网站电视在线观看高清版| 国产成人在线观看| av不卡一区二区三区|