原文地址: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與字符集
你曾經(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)換。類(lèi)似的事情在我研究另一個(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è)胖子,今天我們只看什么是字符集。
出處:
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) 關(guān)于字符集和Unicode的相關(guān)知識(shí) [2]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|