国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java中文處理學(xué)習(xí)筆記——Hello Unicode

2019-11-18 15:20:07
字體:
供稿:網(wǎng)友

版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時請務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
http://www.chedong.com/tech/hello_unicode.Html

要害詞:linux java mutlibyte encoding locale i18n i10n chinese  ISO-8859-1 GB2312 BIG5 GBK UNICODE

內(nèi)容摘要:

    不知道你有沒有這樣的感受:為什么php很少有亂碼問題而用Java做WEB應(yīng)用卻這么麻煩呢?為什么在Google上能用簡體中文查到繁體中文,甚至日文的結(jié)果?而且用Google的時候發(fā)現(xiàn)它居然能自動根據(jù)我使用瀏覽器的語言選擇自動調(diào)出中文界面?

    很多國際化應(yīng)用的讓我理解了這么一個道理:Unicode是為更方便的做國際化應(yīng)用設(shè)計的,而Java核心的字符是基于UNICODE的,這一機(jī)制為應(yīng)用提供了對中文“字”的控制(而不是字節(jié))。但假如不仔細(xì)理解其中的規(guī)范,這種自由反而會成為累贅,從而導(dǎo)致更多的亂碼問題:

    1. 關(guān)于字符集的一些基本概念;
    2. 試驗(yàn)1:顯示系統(tǒng)的環(huán)境設(shè)置和支持的編碼方式;
    3. 試驗(yàn)2:系統(tǒng)缺省編碼方式對Java應(yīng)用的輸入輸出影響;
    4. 試驗(yàn)3:在WEB應(yīng)用中輸出和輸出中的字符集問題;

    關(guān)于字符集的預(yù)備知識:
    ISO-8859-1 GB2312 BIG5 GBK GB18030 UNICODE 為什么會有這么多字符集編碼方式?

    注重:以下說明不是嚴(yán)格定義,一些比喻僅作為方便理解使用。

    假設(shè)一個字符就是棋盤上的一個棋子,有其固定的坐標(biāo),假如需要區(qū)別所有的字符,就需要有足夠的棋格容納不同的“字符”。 

    英文和歐洲其他語言的單字節(jié)字符集(SingleByte Charsets):
    首先對于ISO-8859系列的字符集都想象成一個:2^8 = 16 * 16 = 256個格子的棋盤,這樣所有的西文字符(英文)用這樣一個16×16的坐標(biāo)系就基本可以覆蓋全了。而英文實(shí)際上只用其中小于128(/x80)的部分就夠了。利用大于128部分的空間的不同定義規(guī)則形成了真對其他歐洲語言的擴(kuò)展字符集:ISO-8859-2 ISO-8859-4等……

    ISO-8859-1
    ISO-8859-7
    其他語言
    英文其他西歐字符 ōē
    英文希臘字符
     μγ英文其他單字節(jié) 字符集


    GB2312 BIG5 SJIS等多字節(jié)字符集(MultiByte Charsets):

    對于亞洲語言來說:漢字這么多,用這么一個256格的小棋盤肯定放不下,所以要區(qū)別成千上萬的漢字解決辦法就是用2個字節(jié)(坐標(biāo))來定位一個“字”在棋盤上的位置,將以上規(guī)則做一個擴(kuò)展:

    • 假如第1個字符是小于128(/x80)的仍和英文字符集編碼方式保持兼容;
    • 假如第1個字符是大于128(/x80)的,就當(dāng)成是漢字的第1個字節(jié),這個自己和后面緊跟的1個字節(jié)組成一個漢字;

    其結(jié)果相當(dāng)于在位于128以上的小棋格里每個小棋格又劃分出了一個16×16的小棋盤。這樣一個棋盤中的格子數(shù)(可能容納的字符數(shù))就變成了128 + 128 * 256。按照類似的方式有了簡體中文的GB2312標(biāo)準(zhǔn),繁體中文的BIG5字符集和日文的SJIS字符集等,GB2312字符集包含大約有六仟多個常用簡體漢字。

    簡體中文
    日文SJIS
    繁體中文
    英文簡
    體  中
      文英文日
     文     英文

     繁  體
    中文

    由此可以看出,所有這些從ASCII擴(kuò)展式的編碼方式中:英文部分都是兼容的,但擴(kuò)展部分的編碼方式是不兼容的,雖然很多字在3種體系中寫法一致(比如“中文”這2個字)但在相應(yīng)字符集中的坐標(biāo)不一致,所以GB2312編寫的頁面用BIG5看就變得面目全非了。而且有時候經(jīng)常在瀏覽其他非英語國家的頁面時(比如包含有德語的人名時)經(jīng)常出現(xiàn)希奇的漢字,其實(shí)就是擴(kuò)展位的編碼沖突造成的。

    我把GBK和GB18030理解成一個小UNICODE:GBK字符集是GB2312的擴(kuò)展(K),GBK里大約有貳萬玖仟多個字符,除了保持和GB2312兼容外,繁體中文字,甚至連日文的假名字符也能顯示。而GB18030-2000則是一個更復(fù)雜的字符集,采用變長字節(jié)的編碼方式,能夠支持更多的字符。關(guān)于漢字的編碼方式比較具體的定義規(guī)范可以參考:
    http://www.unihan.com.cn/cjk/ana17.htm

    ASCII(英文) ==> 西歐文字 ==> 東歐字符集(俄文,希臘語等) ==> 東亞字符集(GB2312 BIG5 SJIS等)==> 擴(kuò)展字符集GBK GB18030這個發(fā)展過程基本上也反映了字符集標(biāo)準(zhǔn)的發(fā)展過程,但這么隨著時間的推移,尤其是互聯(lián)網(wǎng)讓跨語言的信息的交互變得越來越多的時候,太多多針對本地語言的編碼標(biāo)準(zhǔn)的出現(xiàn)導(dǎo)致一個應(yīng)用程序的國際化變得成本非常高。尤其是你要編寫一個同時包含法文和簡體中文的文檔,這時候一般都會想到要是用一個通用的字符集能夠顯示所有語言的所有文字就好了,而且這樣做應(yīng)用也能夠比較方便的國際化,為了達(dá)到這個目標(biāo),即使應(yīng)用犧牲一些空間和程序效率也是非常值得的。UNICODE就是這樣一個通用的解決方案。



    發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 新源县| 江津市| 大安市| 通许县| 清水县| 陆河县| 普兰县| 蒲江县| 贵溪市| 通河县| 三原县| 长垣县| 天祝| 宁陵县| 滦南县| 汝阳县| 同心县| 塔河县| 盐边县| 三亚市| 申扎县| 连平县| 含山县| 宝丰县| 乐平市| 庄河市| 镇江市| 容城县| 安宁市| 马鞍山市| 渑池县| 衢州市| 东方市| 渭源县| 永安市| 浦北县| 新竹市| 朝阳区| 长海县| 临泽县| 大冶市|