java中文亂碼問題詳解

java中文亂碼問題詳解

ID:42770147

大小:163.00 KB

頁數(shù):15頁

時(shí)間:2019-09-21

java中文亂碼問題詳解_第1頁
java中文亂碼問題詳解_第2頁
java中文亂碼問題詳解_第3頁
java中文亂碼問題詳解_第4頁
java中文亂碼問題詳解_第5頁
資源描述:

《java中文亂碼問題詳解》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、java中文亂碼問題詳解Abstract:本文深入分析了Java程序設(shè)計(jì)中Java編譯器對(duì)java源文件和JVM對(duì)class類文件的編碼/解碼過程,通過此過程的解析透視出了Java編程中中文問題產(chǎn)生的根本原因,最后給出了建議的最優(yōu)化的解決Java中文問題的方法。?1.中文問題的來源???計(jì)算機(jī)最初的操作系統(tǒng)支持的編碼是單字節(jié)的字符編碼,于是,在計(jì)算機(jī)中一切處理程序最初都是以單字節(jié)編碼的英文為準(zhǔn)進(jìn)行處理。隨著計(jì)算機(jī)的發(fā)展,為了適應(yīng)世界其它民族的語言(當(dāng)然包括我們的漢字),人們提出了UNICODE編碼

2、,它采用雙字節(jié)編碼,兼容英文字符和其它民族的雙字節(jié)字符編碼,所以,目前,大多數(shù)國際性的軟件內(nèi)部均采用UNICODE編碼,在軟件運(yùn)行時(shí),它獲得本地支持系統(tǒng)(多數(shù)時(shí)間是操作系統(tǒng))默認(rèn)支持的編碼格式,然后再將軟件內(nèi)部的UNICODE轉(zhuǎn)化為本地系統(tǒng)默認(rèn)支持的格式顯示出來。Java的JDK和JVM即是如此,我這里說的JDK是指國際版的JDK,我們大多數(shù)程序員使用的是國際化的JDK版本,以下所有的JDK均指國際化的JDK版本。我們的漢字是雙字節(jié)編碼語言,為了能讓計(jì)算機(jī)處理中文,我們自己制定的gb2312、GB

3、K、GBK2K等標(biāo)準(zhǔn)以適應(yīng)計(jì)算機(jī)處理的需求。所以,大部分的操作系統(tǒng)為了適應(yīng)我們處理中文的需求,均定制有中文操作系統(tǒng),它們采用的是GBK,GB2312編碼格式以正確顯示我們的漢字。如:中文Win2K默認(rèn)采用的是GBK編碼顯示,在中文WIN2k中保存文件時(shí)默認(rèn)采用的保存文件的編碼格式也是GBK的,即,所有在中文WIN2K中保存的文件它的內(nèi)部編碼默認(rèn)均采用GBK編碼,注意:GBK是在GB2312基礎(chǔ)上擴(kuò)充來的。???由于Java語言內(nèi)部采用UNICODE編碼,所以在JAVA程序運(yùn)行時(shí),就存在著一個(gè)從UN

4、ICODE編碼和對(duì)應(yīng)的操作系統(tǒng)及瀏覽器支持的編碼格式轉(zhuǎn)換輸入、輸出的問題,這個(gè)轉(zhuǎn)換過程有著一系列的步驟,如果其中任何一步出錯(cuò),則顯示出來的漢字就會(huì)出是亂碼,這就是我們常見的JAVA中文問題。???同時(shí),Java是一個(gè)跨平臺(tái)的編程語言,也即我們編寫的程序不僅能在中文windows上運(yùn)行,也能在中文Linux等系統(tǒng)上運(yùn)行,同時(shí)也要求能在英文等系統(tǒng)上運(yùn)行(我們經(jīng)常看到有人把在中文win2k上編寫的JAVA程序,移植到英文Linux上運(yùn)行)。這種移植操作也會(huì)帶來中文問題。???還有,有人使用英文的操作系統(tǒng)

5、和英文的IE等瀏覽器,來運(yùn)行帶中文字符的程序和瀏覽中文網(wǎng)頁,它們本身就不支持中文,也會(huì)帶來中文問題。???幾乎所有的瀏覽器默認(rèn)在傳遞參數(shù)時(shí)都是以UTF-8編碼格式來傳遞,而不是按中文編碼傳遞,所以,傳遞中文參數(shù)時(shí)也會(huì)有問題,從而帶來亂碼現(xiàn)象。???總之,以上幾個(gè)方面是JAVA中的中文問題的主要來源,我們把以上原因造成的程序不能正確運(yùn)行而產(chǎn)生的問題稱作:JAVA中文問題。1.JAVA編碼轉(zhuǎn)換的詳細(xì)過程???我們常見的JAVA程序包括以下類別:????*直接在console上運(yùn)行的類(包括可視化界面的

6、類)????*JSP代碼類(注:JSP是Servlets類的變型)????*Servelets類????*EJB類????*其它不可以直接運(yùn)行的支持類???這些類文件中,都有可能含有中文字符串,并且我們常用前三類JAVA程序和用戶直接交互,用于輸出和輸入字符,如:我們?cè)贘SP和Servlet中得到客戶端送來的字符,這些字符也包括中文字符。無論這些JAVA類的作用如何,這些JAVA程序的生命周期都是這樣的:???*編程人員在一定的操作系統(tǒng)上選擇一個(gè)合適的編輯軟件來實(shí)現(xiàn)源程序代碼并以.java擴(kuò)展名保

7、存在操作系統(tǒng)中,例如我們?cè)谥形膚in2k中用記事本編輯一個(gè)java源程序;????*編程人員用JDK中的javac.exe來編譯這些源代碼,形成.class類(JSP文件是由容器調(diào)用JDK來編譯的);????*直接運(yùn)行這些類或?qū)⑦@些類布署到WEB容器中去運(yùn)行,并輸出結(jié)果。???那么,在這些過程中,JDK和JVM是如何將這些文件如何編碼和解碼并運(yùn)行的呢?這里,我們以中文win2k操作系統(tǒng)為例說明JAVA類是如何來編碼和被解碼的。???第一步,我們?cè)谥形膚in2k中用編輯軟件如記事本編寫一個(gè)Java源

8、程序文件(包括以上五類JAVA程序),程序文件在保存時(shí)默認(rèn)采用了操作系統(tǒng)默認(rèn)支持GBK編碼格式(操作系統(tǒng)默認(rèn)支持的格式為file.encoding格式)形成了一個(gè).java文件,也即,java程序在被編譯前,我們的JAVA源程序文件是采用操作系統(tǒng)默認(rèn)支持的file.encoding編碼格式保存的,java源程序中含有中文信息字符和英文程序代碼;要查看系統(tǒng)的file.encoding參數(shù),可以用以下代碼:  publicclassShowSystemDefaultEncoding{ 

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。