資源描述:
《java亂碼問題分析及解決22》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、java亂碼問題分析及解決計算機中,只有二進制的數據,不管數據是在內存中,還是在外部存儲設備上。對于我們所看到的字符,也是以二進制數據的形式存在的。不同字符對應二進制數的規(guī)則,就是字符的編碼。字符編碼的集合稱為字符集。下面我們來總結下常用字符集1.ASCIIASCII(AmericanStandardCodeforInformationInterchange,美國信息互換標準代碼),是基于常用的英文字符的一套電腦編碼系統(tǒng)。每一個ASCII碼與一個8位(bit)二進制數對應。其最高位是0,相應的十進制數是0~127
2、。例如,數字字符“0”的編碼用十進制數表示就是48。另有128個擴展的ASCII碼,最高位都是1,由一些圖形和畫線符號組成。ASCII是現今最通用的單字節(jié)編碼系統(tǒng)。ASCII用一個字節(jié)來表示字符,最多能夠表示256種字符。隨著計算機的普及,許多國家都將本地的語言符號引入到計算機中,擴展了計算機中字符的范圍,于是就出現了各種不同的字符集。ASCII碼表請看附錄一。2.ISO8859-1因為ASCII碼中缺少£、ü和許多書寫其他語言所需的字符,為此,可以通過指定128以后的字符來擴展ASCII碼。國際標準組織(ISO
3、)定義了幾個不同的字符集,它們是在ASCII碼基礎上增加了其他語言和地區(qū)需要的字符。其中最常用的是ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字符,其中0~127的字符與ASCII碼相同。ISO8859另外定義了14個適用于不同文字的字符集(8859-2到8859-15)。這些字符集共享0~127的ASCII碼,只是每個字符集都包含了128~255的其他字符。3.GB2312和GBKGB2312是中華人民共和國國家標準漢字信息交換用編碼,全稱《信息交換用漢字編
4、碼字符集-基本集》,標準號為GB2312-80,是一個由中華人民共和國國家標準總局發(fā)布的關于簡化漢字的編碼,通行于中國大陸和新加坡,簡稱國標碼。因為中文字符數量較多,所以采用兩個字節(jié)來表示一個字符,分別稱為高位和低位。為了和ASCII碼有所區(qū)別,中文字符的每一個字節(jié)的最高位都用1來表示。GB2312字符集是幾乎所有的中文系統(tǒng)和國際化的軟件都支持的中文字符集,也是最基本的中文字符集。它包含了大部分常用的一、二級漢字和9區(qū)的符號,其編碼范圍是高位0xa1-0xfe,低位也是0xa1-0xfe,漢字從0xb0a1開始,
5、結束于0xf7fe。為了對更多的字符和符號進行編碼,由前電子部科技質量司和國家技術監(jiān)督局標準化司于1995年12月頒布了GBK(K是“擴展”的漢語拼音第一個字母)編碼規(guī)范,在新的編碼系統(tǒng)里,除了完全兼容GB2312外,還對繁體中文、一些不常用的漢字和許多符號進行了編碼。它也是現階段Windows和其他一些中文操作系統(tǒng)的默認字符集,但并不是所有的國際化軟件都支持該字符集。不過要注意的是GBK不是國家標準,它只是規(guī)范。GBK字符集包含了20902個漢字,其編碼范圍是0x8140-0xfefe。每個國家(或區(qū)域)都規(guī)定
6、了計算機信息交換用的字符編碼集,這就造成了交流上的困難。想像一下,你發(fā)送一封中文郵件給一位遠在西班牙的朋友,當郵件通過網絡發(fā)送出去的時候,你所書寫的中文字符會按照本地的字符集GBK轉換為二進制編碼數據,然后發(fā)送出去。當你的朋友接收到郵件(二進制數據)后,查看信件時,會按照他所用系統(tǒng)的字符集,將二進制編碼數據解碼為字符,然而由于兩種字符集之間編碼的規(guī)則不同,導致轉換出現亂碼。這是因為,在不同的字符集之間,同樣的數字可能對應了不同的符號,也可能在另一種字符集中,該數字沒有對應符號。為了解決上述問題,統(tǒng)一全世界的字符編
7、碼,由Unicode協(xié)會制定并發(fā)布了Unicode編碼。1.UNICODEUnicode(統(tǒng)一的字符編碼標準集)使用0~65535的雙字節(jié)無符號數對每一個字符進行編碼。它不僅包含來自英語和其他西歐國家字母表中的常見字母和符號,也包含來自古斯拉夫語、希臘語、希伯來語、阿拉伯語和梵語的字母表。另外還包含漢語和日語的象形漢字和韓國的Hangul音節(jié)表。目前已經定義了40000多個不同的Unicode字符,剩余25000個空缺留給將來擴展使用。其中大約20000個字符用于漢字,另外11000左右的字符用于韓語音節(jié)。Uni
8、code中0~255的字符與ISO8859-1中的一致。Unicode編碼對于英文字符采取前面加“0”字節(jié)的策略實現等長兼容。如“a”的ASCII碼為0x61,Unicode碼就為0x00,0x61。2.UTF-8使用Unicode編碼,一個英文字符要占用兩個字節(jié),在Internet上,大多數的信息都是用英文來表示的,如果都采用Unicode編碼,將會使數據量增加一倍。為