欧美黑人激情性久久,一本色道久久综合无码人妻,欧美另类人妻制服丝袜,日韩精品一卡2卡3卡4卡新区乱码,欧洲熟妇性色黄在线观看免费,97夜夜澡人人爽人人喊中国片,77se77亚洲欧美在线,久久精品一区二区免费播放

                    關(guān)于字符集和Unicode的相關(guān)知識(shí)

                    原文地址 : http://www.joelonsoftware.com/articles/Unicode.html 作者:Joel Spolsky 譯文: http://local.joelonsoftware.com/wiki/Talk:Chinese_(Simplified ) 每個(gè)程序員都絕對(duì)必須知道的關(guān)于字符集和Unicode的那點(diǎn)兒事(別找借口?。?Unicode與字符集

                    原文地址http://www.joelonsoftware.com/articles/Unicode.html
                    作者:Joel Spolsky
                    譯文:http://local.joelonsoftware.com/wiki/Talk:Chinese_(Simplified)

                    每個(gè)程序員都絕對(duì)必須知道的關(guān)于字符集和Unicode的那點(diǎn)兒事(別找借口?。?/SPAN>

                    Unicode與字符集

                    你曾經(jīng)是否覺(jué)得HTML中的”Content-Type”標(biāo)簽充滿神秘?雖然你知道這個(gè)東西必須出現(xiàn)在HTML中,但對(duì)于它到底干嗎你可能一無(wú)所知。

                    你是否曾經(jīng)收到過(guò)來(lái)自你保加利亞朋友的郵件,到處都是”???? ?????? ??? ????”?

                    我很失望,因?yàn)槲野l(fā)現(xiàn)許多軟件開(kāi)發(fā)人員到現(xiàn)在為止都還沒(méi)有對(duì)字符集、編碼、Unicode有一個(gè)清晰的認(rèn)識(shí),這是個(gè)事實(shí)。幾年前,在測(cè)試FogBUGZ項(xiàng)目時(shí),忽然想看看它能不能接收用日文寫(xiě)的電子郵件。這個(gè)世界上會(huì)有人用日文寫(xiě)電子郵件?我不知道。測(cè)試結(jié)果很糟糕。我仔細(xì)看了用來(lái)解析MIME (Multipurpose Internet Mail Extenisons)格式的郵件所用的ActiveX控件,發(fā)現(xiàn)了它在字符集上面做的蠢事。于是我們不得不重新寫(xiě)一段代碼,先消除Active控件的錯(cuò)誤,然后再完成正確的轉(zhuǎn)換。類似的事情在我研究另一個(gè)商業(yè)庫(kù)的時(shí)候同樣發(fā)生了,這個(gè)庫(kù)關(guān)于字符編碼這部分的實(shí)現(xiàn)簡(jiǎn)直糟透了。我找到它的開(kāi)發(fā)者,把存在問(wèn)題的包指給他,他卻表示對(duì)于此無(wú)能為力。像很多程序員一樣,他只希望這個(gè)缺陷會(huì)被人們遺忘。

                    事實(shí)并非如他所愿。因?yàn)槲野l(fā)現(xiàn),像PHP這么流行的網(wǎng)頁(yè)開(kāi)發(fā)工具,竟然在實(shí)現(xiàn)上也完全忽略了多種字符編碼的存在(譯者注:這篇文章寫(xiě)于2003年,現(xiàn)在的 PHP可能已經(jīng)糾正了這個(gè)問(wèn)題吧),盲目地只使用8個(gè)比特來(lái)表示字符,于是開(kāi)發(fā)優(yōu)秀的國(guó)際化的Web應(yīng)用程序變成了一場(chǎng)夢(mèng)。我想說(shuō),受夠了。

                    我申明:在2003年,如果你是一個(gè)程序員,但你卻對(duì)字符、字符集、編碼和Unicode一無(wú)所知,那么你別讓我抓到你。如果落在我手里,我會(huì)讓你待在潛水艇里剝六個(gè)月的洋蔥,我發(fā)誓。

                    另外,還有一件事:

                    這個(gè)一點(diǎn)都不難。

                    在這篇文章里,我所講的是每一個(gè)工作中的程序員都應(yīng)該知道的知識(shí)。所有以為”純文本 = ASCII碼 = 一個(gè)字符就是8比特”的人不單單錯(cuò)了,而且錯(cuò)得離譜。如果你仍然堅(jiān)持使用這種方式編寫(xiě)程序,那么你比一個(gè)不相信細(xì)菌的存在醫(yī)生好不到哪里去。所以在你讀完這篇文章以前,不要再寫(xiě)半行代碼。

                    在我開(kāi)始之前,必須說(shuō)明白,如果你已經(jīng)了解了國(guó)際化,可能你會(huì)覺(jué)得這篇文章過(guò)于簡(jiǎn)單。沒(méi)錯(cuò),我的的確確是想架一座最短的橋,讓任何人都可以理解發(fā)生了什么事,懂得如何寫(xiě)出可以在非英文語(yǔ)言環(huán)境是正常工作的代碼。還得指出,字符處理僅僅是軟件國(guó)際化中的一小部分,但一口吃不成個(gè)胖子,今天我們只看什么是字符集。

                    歷史回顧

                    可能你以為我要開(kāi)始談非常古老的字符集如EBCDIC之類的,實(shí)際上我不會(huì)。EBCDIC與你的生活無(wú)關(guān),我們不需要回到那么遠(yuǎn)。

                    ascii.png

                    回到一般遠(yuǎn)就行了。當(dāng)Unix剛出來(lái)的時(shí)候,K&R寫(xiě)了《The C Programming Language》一書(shū),那時(shí)一切都很簡(jiǎn)單。EBCDIC已經(jīng)慚慚不用,因?yàn)樾枰硎镜淖址挥心切┎粠е匾舻挠⑽淖帜?,ASCII完全可以勝任。ASCII使用數(shù)字32到 127來(lái)表示所有的英文字母,比如空格是32,字母”A”是65等等。使用7個(gè)比特就可以存儲(chǔ)所有這樣字符。那個(gè)時(shí)代的大多數(shù)計(jì)算機(jī)使用8個(gè)比特來(lái),所以你不但可以存儲(chǔ)全部的ASCII,而且還有一個(gè)比特可以多出來(lái)用作其他。如果你想,你可以把它用作你不可告人的目的。32以下的碼字是不可打印的,它們屬于控制字符,像7表示響鈴,12表示打印機(jī)換紙。

                    所有的一切都看起來(lái)那么完美,當(dāng)然前提你生在一個(gè)講英文的國(guó)家。

                    oem.png

                    因?yàn)橐粋€(gè)字節(jié)有8個(gè)比特,而現(xiàn)在只用了7個(gè),于是很多人就想到”對(duì)呀,我們可以使用128-255的碼字來(lái)表示其他東西”。麻煩來(lái)了,這么多人同時(shí)出現(xiàn)了這樣的想法,而且將之付諸實(shí)踐。于是IBM-PC上多了一個(gè)叫OEM字符集的東西,它包括了一些在歐洲語(yǔ)言中用到的重音字符,還有一些畫(huà)圖的字符,比如水平線、垂直線等,水平線在右端會(huì)帶一個(gè)小彎鉤,垂直線會(huì)如何等等。使用這些畫(huà)圖字符你可以畫(huà)出漂亮的框、畫(huà)出光滑的線條,在老式的烘干機(jī)上的8088電腦上你依然可以看到這些字符。事實(shí)上,當(dāng)PC在美國(guó)之外的地方開(kāi)始銷售的時(shí)候,OEM字符集就完全亂套了,所有的廠商都開(kāi)始按照自己的方式使用高128個(gè)碼字。比如在有些PC上,130表示é,而在另外一些在以色列出售的計(jì)算機(jī)上,它可能表示的是希伯來(lái)字母ג,所以當(dāng)美國(guó)人把包含résumés這樣字符的郵件發(fā)到以色列時(shí),就為變?yōu)閞גsumגs。在大多數(shù)情況下,比如俄語(yǔ)中,高128個(gè)碼字可能用作其他更多的用途,那么你如何保證俄語(yǔ)文檔的可靠性呢?

                    最終ANSI標(biāo)準(zhǔn)結(jié)束了這種混亂。在標(biāo)準(zhǔn)中,對(duì)于低128個(gè)碼字大家都無(wú)異議,差不多就是ASCII了,但對(duì)于高128個(gè)碼字,根據(jù)你所在地的不同,會(huì)有不同的處理方式。我們稱這樣相異的編碼系統(tǒng)為碼頁(yè)(code pages)。舉個(gè)例子,比如在以色列發(fā)布的DOS中使用的碼頁(yè)是862,而在希臘使用的是737。它們的低128個(gè)完全相同,但從128往上,就有了很大差別。MS-DOS的國(guó)際版有很多這樣的碼頁(yè),涵蓋了從英語(yǔ)到冰島語(yǔ)各種語(yǔ)言,甚至還有一些”多語(yǔ)言”碼頁(yè)。但是還得說(shuō),如果想讓希伯來(lái)語(yǔ)和希臘語(yǔ)在同一臺(tái)計(jì)算機(jī)上和平共處,基本上沒(méi)有可能。除非你自己寫(xiě)程序,程序中的顯示部分直接使用位圖。因?yàn)橄2畞?lái)語(yǔ)對(duì)高128個(gè)碼字的解釋與希臘語(yǔ)壓根不同。

                    同時(shí),在亞洲,更瘋狂的事情正在上演。因?yàn)閬喼薜淖帜赶到y(tǒng)中要上千個(gè)字母,8個(gè)比特?zé)o論如何也是滿足不了的。一般的解決方案就是使用DBCS- “雙字節(jié)字符集”,即有的字母使用一個(gè)字節(jié)來(lái)表示,有的使用兩個(gè)字節(jié)。所以處理字符串時(shí),指針移動(dòng)到下一個(gè)字符比較容易,但移動(dòng)到上一個(gè)字符就變得非常危險(xiǎn)了。于是s++或s–不再被鼓勵(lì)使用,相應(yīng)的比如Windows下的AnsiNext和AnsiPrev被用來(lái)處理這種情況。

                    可惜,不少人依然堅(jiān)信一個(gè)字節(jié)就是一個(gè)字符,一個(gè)字符就是8個(gè)比特。當(dāng)然,如果你從來(lái)都沒(méi)有試著把一個(gè)字符串從一臺(tái)計(jì)算機(jī)移到另一臺(tái)計(jì)算機(jī),或者你不用說(shuō)除英文以外的另一種語(yǔ)言,那么你的堅(jiān)信不會(huì)出問(wèn)題。但是互聯(lián)網(wǎng)出現(xiàn)讓字符串在計(jì)算機(jī)間移動(dòng)變得非常普遍,于是所有的混亂都爆發(fā)了。非常幸運(yùn),Unicode適時(shí)而生。

                    Unicode

                    Unicode 是一個(gè)勇敢的嘗試,它試圖用一個(gè)字符集涵蓋這個(gè)星球上的所有書(shū)寫(xiě)系統(tǒng)。一些人誤以為Unicode只是簡(jiǎn)單的使用16比特的碼字,也就是說(shuō)每一個(gè)字符對(duì)應(yīng) 16比特,總共可以表示65536個(gè)字符。這是完全不正確的。不過(guò)這是關(guān)于Unicode的最普遍的誤解,如果你也這樣認(rèn)為,不用感到不好意思。

                    事實(shí)上,Unicode使用一種與之前系統(tǒng)不同的思路來(lái)考慮字符,如果你不能理解這種思路,那其他的也就毫無(wú)意義了。

                    到現(xiàn)在為止,我們的做法是把一個(gè)字母映射到幾個(gè)比特,這些比特可以存儲(chǔ)在磁盤或者內(nèi)存中。

                    A -> 0100 0001

                    在Unicode中,一個(gè)字母被映射到一個(gè)叫做碼點(diǎn)(code point)的東西,這個(gè)碼點(diǎn)可以看作一個(gè)純粹的邏輯概念。至于碼點(diǎn)(code point)如何在內(nèi)存或磁盤中存儲(chǔ)是另外的一個(gè)故事了。

                    在Unicode中,字母A可看做是一個(gè)柏拉圖式的理想,僅存在于天堂之中:(我的理解是字母A就是一個(gè)抽象,世界上并不存在這樣的東西,如果數(shù)學(xué)里面的0、1、2等一樣)

                    A

                    這個(gè)柏拉圖式的AB不同,也與a不同,但與AA相同。這個(gè)觀點(diǎn)就是Times New Roman字體中的A與Helvetica字體中的A相同,與小寫(xiě)的”a”不同,這個(gè)應(yīng)該不會(huì)引起太多的異議。但在一些語(yǔ)言中,如何辨別一個(gè)字母會(huì)有很大的爭(zhēng)議。比如在德語(yǔ)中,字母 ß是看做一個(gè)完整的字母,還是看做ss的一種花式寫(xiě)法?如果在一個(gè)字母的形狀因?yàn)樗幵谝粋€(gè)單詞的末尾而略有改變,那還算是那個(gè)字母嗎?阿拉人說(shuō)當(dāng)然算了,但希伯來(lái)人卻不這么認(rèn)為。但無(wú)論如何,這些問(wèn)題已經(jīng)被Unicode委員會(huì)的這幫聰明人給解決了,盡管這花了他們十多年的時(shí)間,盡管其中涉及多次政治味道很濃的辯論,但至少現(xiàn)在你不用再為這個(gè)操心了,因?yàn)樗呀?jīng)被解決。

                    每一個(gè)字母系統(tǒng)中的每一個(gè)柏拉圖式的字母在Unicode中都被分配了一個(gè)神奇的數(shù)字,比如像U+0639。這個(gè)神奇數(shù)字就是前面提到過(guò)的碼點(diǎn)(code point)。U+的意思就是”Unicode”,后面跟的數(shù)字是十六進(jìn)制的。U+0639表示的是阿拉伯字母Ain。英文字母A在Unicode中的表示是U+0041。你可以使用Windows 2000/XP自帶的字符表功能或者Unicode的官方網(wǎng)站(www.unicode.org)來(lái)查找與字母的對(duì)應(yīng)關(guān)系。

                    事實(shí)上Unicode可以定義的字符數(shù)并沒(méi)有上限,而且現(xiàn)在已經(jīng)超過(guò)65536了。顯然,并不是任何Unicode字符都可以用2個(gè)字節(jié)來(lái)表示了。

                    舉個(gè)例子,假設(shè)我們現(xiàn)在有一個(gè)字符串:

                    Hello

                    在Unicode中,對(duì)應(yīng)的碼點(diǎn)(code point)如下:

                    U+0048 U+0065 U+006C U+006C U+006F

                    瞧,僅僅是一堆碼點(diǎn)而已,或者說(shuō)數(shù)字。不過(guò)到現(xiàn)在為止,我們還沒(méi)有說(shuō)這些碼點(diǎn)究竟是如何存儲(chǔ)到內(nèi)存或如何表示在email信息中的。

                    12
                    網(wǎng)頁(yè)理論

                    壓縮,讓網(wǎng)絡(luò)更快

                    2010-3-12 4:27:00

                    網(wǎng)頁(yè)理論

                    網(wǎng)站導(dǎo)航設(shè)計(jì)的6個(gè)分類

                    2010-7-12 14:01:00

                    0 條回復(fù) A文章作者 M管理員
                      暫無(wú)討論,說(shuō)說(shuō)你的看法吧
                    ?
                    個(gè)人中心
                    購(gòu)物車
                    優(yōu)惠劵
                    有新私信 私信列表
                    搜索
                    主站蜘蛛池模板: 久久人人爽人人爽人人爽| 公天天吃我奶躁我的在线观看| 国产成人一区二区青青草原 | 国产xxx视频在线观看软件| 日韩V欧美V中文在线| 99久久精品免费看国产一区二区三区| 国产午夜理论片不卡| caoporn成人免费公开| 国产又色又爽又黄刺激视频| 国产亚洲精品久久久久久武则天| 亚洲av成人精品免费看| 国精产品一区二区三区| 亚洲精品无码久久久久去q| 欧美大胆老熟妇乱子伦视频| 天堂а√中文最新版地址在线| 中文字幕在线精品乱码| 亚洲无av在线中文字幕| 亚洲人成无码网站在线观看| 国产热久久精| 在线视频不卡在线亚洲| 天堂网在线观看| 国产一区二区三区导航| 国产三区二区| 国产欧美va欧美va香蕉在线观看| 午夜福利一区二区三区在线观看| 亚洲精品92内射| 色欲a∨无码蜜臀av免费播| 国产成人无码免费看视频软件| 中文字幕丝袜精品久久| 婷婷国产天堂久久综合亚洲| 在线天堂新版资源www在线下载| 一个人看的www视频在线播放| 国产av无码专区亚汌a√| 各种少妇wbb撒尿| 精品久久久久久久久久久国产字幕 | 亚洲中文字幕无码一区| 18禁黄网站禁片无遮挡观看| 国产亚洲精品AA片在线爽| 欧美一区二区三区成人久久片| 日韩精品无码二三区a片| 亚洲av麻豆aⅴ无码电影|