下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Java 字符編碼原理Java 開發(fā)中,常常會遇到亂碼的問題,一旦遇到這種問題,常常比較煩惱,大家都不愿意承認是自己的代碼有問題。其 實編碼問題并沒有那么神秘,那么不可捉摸,搞清 Java 的編碼本質(zhì)過程就真相大白了。先看個圖:其實,編碼問題存在兩個方面:JVM 之內(nèi)和 JVM 之外。1、 Java 文件編譯后形成 class這里 Java 文件的編碼可能有多種多樣, 但 Java 編譯器會自動將這些編碼按照 Java 文件的編碼格式正確讀取后產(chǎn)生 class 文件,這里的 class 文件編碼是 Unicode 編碼(具體說是 UTF-16編碼。因此,在 Java 代碼中定義一個字符串:St
2、ring s="漢字 "不管在編譯前 java 文件使用何種編碼,在編譯后成 class 后,他們都是一樣的 -Unicode 編碼表示。1 / 3 2、 JVM 中的編碼JVM 加載 class 文件讀取時候使用 Unicode 編碼方式正確讀取 class 文件, 那么原來定義的 String s="漢字 " 在內(nèi)存中 的表現(xiàn)形式是 Unicode 編碼。當調(diào)用 String.getBytes(的時候, 其實已經(jīng)為亂碼買下了禍根。 因為此方法使用平臺默認的字符集來獲取字符串對應的 字節(jié)數(shù)組。在 WindowsXP 中文版中,使用的默認編碼是 GBK
3、,不信運行下:public class Test public static void main(String args System.out.println(" 當前 JRE :" + System.getProperty("java.version" ;System.out.println(" 當前 JVM 的默認字符集:" + Charset.defaultCharset(;當前 JRE :1.8.0_16當前 JVM 的默認字符集:GBK當不同的系統(tǒng)、數(shù)據(jù)庫經(jīng)過多次編碼后,如果對其中的原理不理解,就容易導致亂碼。因此,在一個系
4、統(tǒng)中,有必要對 字符串的編碼做一個統(tǒng)一,這個統(tǒng)一模糊點說,就是對外統(tǒng)一。比如方法字符串參數(shù), IO 流,在中文系統(tǒng)中,可以統(tǒng)一使用 GBK 、 GB13080、 UTF-8、 UTF-16等等都可以,只是要選擇有些更大字符集,以保證任何可能用到的字符都可以正常顯示, 避免亂碼的問題。(假設對所有的文件都用 ASCII 碼那么就無法實現(xiàn)雙向轉(zhuǎn)換了。要特別注意的是, UTF-8并非能容納了所有的中文字符集編碼,因此,在特殊情況下, UTF-8轉(zhuǎn) GB18030可能會出現(xiàn) 亂碼, 然而一群傻 B 常常在做中文系統(tǒng)喜歡用 UTF-8編碼而不說不出個所以然出來! 最傻 B 的是, 一個系統(tǒng)多個人做, 源
5、代 碼文件有的人用 GBK 編碼,有人用 UTF-8,還有人用 GB18030。 FK ,都是中國人,也不是外包項目,用什么 UTF-8啊, 神經(jīng)!源代碼統(tǒng)統(tǒng)都用 GBK18030就 OK 了,免得 ANT 腳本編譯時候提示不可認的字符編碼。因此,對于中文系統(tǒng)來說,最好選擇 GBK 或 GB18030編碼(其實 GBK 是 GB18030的子集,以便最大限度的避免 亂碼現(xiàn)象。3、內(nèi)存中字符串的編碼內(nèi)存中的字符串不僅僅局限于從 class 代碼中直接加載而來的字符串,還有一些字符串是從文本文件中讀取的,還有的 是通過數(shù)據(jù)庫讀取的,還有可能是從字節(jié)數(shù)組構(gòu)建的,然而他們基本上都不是 Unicode 編碼的,原因很簡單,存儲優(yōu)化。2 / 3因此就需要處理各種各樣的編碼問題, 在處理之前, 必須明確 “源” 的編碼, 然后用指定的編碼方式正確讀取到內(nèi)存中。 如果是一個方法的參數(shù),實際上必須明確該字符串參數(shù)的編碼,因為這個參數(shù)可能是另外一個日文系統(tǒng)傳遞過來的。當明確 了字符串編碼時候,就可以按照要求正確處理字符串,以避免亂碼。在對字符串進行解碼編碼的時候,應該調(diào)用下面的方法:getBytes(String charsetNameString(byte b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年荒山荒地土地流轉(zhuǎn)及生態(tài)補償機制合同范本
- 2025年度黃金現(xiàn)貨交易平臺數(shù)據(jù)安全保密服務合同
- 2025年度企業(yè)并購重組股權(quán)轉(zhuǎn)讓合同樣本
- 2025年度建筑安裝工程合同終止通知模板
- 2025年不銹鋼來料加工合同樣本(三篇)
- 二零二五年度大豆品牌授權(quán)及營銷推廣合同4篇
- 2025年度專業(yè)戶外登山俱樂部領(lǐng)隊崗位職責合同
- 二零二四年商業(yè)地產(chǎn)租賃糾紛調(diào)解服務合同3篇
- 2025年度環(huán)境監(jiān)測數(shù)據(jù)共享與交換合同
- 二零二五年度泥工施工安全生產(chǎn)責任險合同
- 《openEuler操作系統(tǒng)》考試復習題庫(含答案)
- 北師大版五年級上冊數(shù)學期末測試卷及答案共5套
- 2024-2025學年人教版生物八年級上冊期末綜合測試卷
- 2025年九省聯(lián)考新高考 語文試卷(含答案解析)
- 全過程工程咨詢投標方案(技術(shù)方案)
- 心理健康教育學情分析報告
- 安宮牛黃丸的培訓
- 婦科腫瘤護理新進展Ppt
- 高三(10)班下學期家長會
- 中國酒文化 酒文化介紹 酒的禮俗 中國風PPT模板
- 山西省原平市高鋁土實業(yè)有限公司鋁土礦資源開發(fā)利用、地質(zhì)環(huán)境保護與土地復墾方案
評論
0/150
提交評論