資源描述:
《字符串編碼機制和亂碼解決及誤區(qū)詳解》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、字符串編碼機制詳解字符,字節(jié)和編碼[原創(chuàng)文章,轉(zhuǎn)載請保留或注明出處:http://www.regexlab.com/zh/encoding.htm]級別:中級摘要:本文介紹了字符與編碼的發(fā)展過程,相關(guān)概念的正確理解。舉例說明了一些實際應(yīng)用中,編碼的實現(xiàn)方法。然后,本文講述了通常對字符與編碼的幾種誤解,由于這些誤解而導(dǎo)致亂碼產(chǎn)生的原因,以及消除亂碼的辦法。本文的內(nèi)容涵蓋了“中文問題”,“亂碼問題”。掌握編碼問題的關(guān)鍵是正確地理解相關(guān)概念,編碼所涉及的技術(shù)其實是很簡單的。因此,閱讀本文時需要慢讀多想,多思考。引言“字符與編碼”是一個被經(jīng)常討論的話題。即使這樣,時常出現(xiàn)的亂碼仍然困擾
2、著大家。雖然我們有很多的辦法可以用來消除亂碼,但我們并不一定理解這些辦法的內(nèi)在原理。而有的亂碼產(chǎn)生的原因,實際上由于底層代碼本身有問題所導(dǎo)致的。因此,不僅是初學(xué)者會對字符編碼感到模糊,有的底層開發(fā)人員同樣對字符編碼缺乏準(zhǔn)確的理解?;仨撌?.編碼問題的由來,相關(guān)概念的理解1.1字符與編碼的發(fā)展從計算機對多國語言的支持角度看,大致可以分為三個階段: 系統(tǒng)內(nèi)碼說明系統(tǒng)階段一ASCII計算機剛開始只支持英語,其它語言不能夠在計算機上存儲和顯示。英文DOS階段二ANSI編碼(本地化)為使計算機支持更多語言,通常使用0x80~0xFF范圍的2個字節(jié)來表示1個字符。比如:漢字'中'在中文操作
3、系統(tǒng)中,使用[0xD6,0xD0]這兩個字節(jié)存儲。不同的國家和地區(qū)制定了不同的標(biāo)準(zhǔn),由此產(chǎn)生了GB2312,BIG5,JIS等各自的編碼標(biāo)準(zhǔn)。這些使用2個字節(jié)來代表一個字符的各種漢字延伸編碼方式,稱為ANSI編碼。在簡體中文系統(tǒng)下,ANSI編碼代表GB2312編碼,在日文操作系統(tǒng)下,ANSI編碼代表JIS編碼。中文DOS,中文Windows95/98,日文Windows95/98不同ANSI編碼之間互不兼容,當(dāng)信息在國際間交流時,無法將屬于兩種語言的文字,存儲在同一段ANSI編碼的文本中。階段三UNICODE(國際化)為了使國際間信息交流更加方便,國際組織制定了UNICODE字
4、符集,為各種語言中的每一個字符設(shè)定了統(tǒng)一并且唯一的數(shù)字編號,以滿足跨語言、跨平臺進行文本轉(zhuǎn)換、處理的要求。WindowsNT/2000/XP,Linux,Java字符串在內(nèi)存中的存放方法:在ASCII階段,單字節(jié)字符串使用一個字節(jié)存放一個字符(SBCS)。比如,"Bob123"在內(nèi)存中為:426F6231323300Bob123