web開發人員必須知道的Unicode與字符集相關知識
- 發布于:2024-05-10
- 共 351 人圍觀
Unicode與字符集
你曾經是否覺得HTML中的"Content-Type"標簽充滿神秘?雖然你知道這個東西必須出現在HTML中,但對于它到底干嗎你可能一無所知。
你是否曾經收到過來自你保加利亞朋友的郵件,到處都是"?????????????????"?
我很失望,因為我發現許多軟件開發人員到現在為止都還沒有對字符集、編碼、Unicode有一個清晰的認識,這是個事實。幾年前,在測試FogBUGZ項目時,忽然想看看它能不能接收用日文寫的電子郵件。這個世界上會有人用日文寫電子郵件?我不知道。測試結果很糟糕。我仔細看了用來解析MIME(MultipurposeInternetMailExtenisons)格式的郵件所用的ActiveX控件,發現了它在字符集上面做的蠢事。于是我們不得不重新寫一段代碼,先消除Active控件的錯誤,然后再完成正確的轉換。類似的事情在我研究另一個商業庫的時候同樣發生了,這個庫關于字符編碼這部分的實現簡直糟透了。我找到它的開發者,把存在問題的包指給他,他卻表示對于此無能為力。像很多程序員一樣,他只希望這個缺陷會被人們遺忘。
事實并非如他所愿。因為我發現,像PHP這么流行的網頁開發工具,竟然在實現上也完全忽略了多種字符編碼的存在(譯者注:這篇文章寫于2003年,現在的PHP可能已經糾正了這個問題吧),盲目地只使用8個比特來表示字符,于是開發優秀的國際化的Web應用程序變成了一場夢。我想說,受夠了。
我申明:在2003年,如果你是一個程序員,但你卻對字符、字符集、編碼和Unicode一無所知,那么你別讓我抓到你。如果落在我手里,我會讓你待在潛水艇里剝六個月的洋蔥,我發誓。
另外,還有一件事:
這個一點都不難。
在這篇文章里,我所講的是每一個工作中的程序員都應該知道的知識。所有以為"純文本=ASCII碼=一個字符就是8比特"的人不單單錯了,而且錯得離譜。如果你仍然堅持使用這種方式編寫程序,那么你比一個不相信細菌的存在醫生好不到哪里去。所以在你讀完這篇文章以前,不要再寫半行代碼。
在我開始之前,必須說明白,如果你已經了解了國際化,可能你會覺得這篇文章過于簡單。沒錯,我的的確確是想架一座最短的橋,讓任何人都可以理解發生了什么事,懂得如何寫出可以在非英文語言環境是正常工作的代碼。還得指出,字符處理僅僅是軟件國際化中的一小部分,但一口吃不成個胖子,今天我們只看什么是字符集。