UCS & BOM

UCS

UCS,全稱爲Universal Multiple-Octet Coded Character Set (UCS),是所有其他字符集標準的一個超集。它保證與其他字符集是雙向兼容的,就是說,如果你將任何文本字符串翻譯到 UCS格式,然後再翻譯回原編碼,你不會丟失任何信息。

UCS 包含了用於表達所有已知語言的字符. 不僅包括拉丁語,希臘語,斯拉夫語,希伯來語,阿拉伯語,亞美尼亞語和喬治亞語的描述,還包括中文,日文和韓文這樣的象形文字,以及 平假名,片假名,孟加拉語,旁遮普語果魯穆奇字符(Gurmukhi),泰米爾語,印.埃納德語(Kannada),Malayalam,泰國語,老撾語,漢語拼音(Bopomofo),Hangul,Devangari,Gujarati,Oriya,Telugu 以及其他數也數不清的語. 對於還沒有加入的語言,由於正在研究怎樣在計算機中最好地編碼它們,因而最終它們都將被加入. 這些語言包括 Tibetian,高棉語,Runic(古代北歐文字),埃塞俄比亞語,其他象形文字,以及各種各樣的印-歐語系的語言,還包括挑選出來的藝術語言比如 Tengwar,Cirth 和克林貢語(Klingon). UCS 還包括大量的圖形的,印刷用的,數學用的和科學用的符號,包括所有由 TeX,Postscript,MS-DOS[2],MS-Windows,Macintosh,OCR字體,以及許多其他字處理和出版系統提供的字符.
ISO 10646 定義了一個 31 位的字符集. 然而,在這巨大的編碼空間中,迄今爲止只分配了前 65534 個碼位 (0x0000 到 0xFFFD). 這個 UCS 的 16位子集稱爲 基本多語言面 (Basic Multilingual Plane,BMP). 將被編碼在 16 位 BMP 以外的字符都屬於非常特殊的字符(比如象形文字),且只有專家在歷史和科學領域裏纔會用到它們. 按當前的計劃,將來也許再也不會有字符被分配到從 0x000000 到 0x10FFFF 這個覆蓋了超過 100 萬個潛在的未來字符的 21 位的編碼空間以外去了. ISO 10646-1 標準第一次發表於 1993 年,定義了字符集與 BMP 中內容的架構. 定義 BMP 以外的字符編碼的第二部分 ISO 10646-2 正在準備中,但也許要過好幾年才能完成. 新的字符仍源源不斷地加入到 BMP 中,但已經存在的字符是穩定的且不會再改變了.
UCS 不僅給每個字符分配一個代碼,而且賦予了一個正式的名字. 表示一個 UCS 或 Unicode 值的十六進制數,通常在前面加上 "U+",就象 U+0041 代表字符"拉丁大寫字母A". UCS 字符 U+0000 到 U+007F 與 US-ASCⅡ(ISO 646) 是一致的,U+0000 到 U+00FF 與ISO 8859-1(Latin-1) 也是一致的. 從 U+E000 到 U+F8FF,已經 BMP 以外的大範圍的編碼是爲私用保留的.
UCS的實際表現形式爲UTF-8/UTF-16/UTF-32編碼.

BOM
BOM —— Byte Order Mark,中文名譯作“字節順序標記”。在這裏找到一段關於 BOM 的說明:
在UCS 編碼中有一個叫做 "Zero Width No-Break Space" ,中文譯名作“零寬無間斷間隔”的字符,它的編碼是 FEFF。而 FFFE 在 UCS 中是不存在的字符,所以不應該出現在實際傳輸中。UCS 規範建議我們在傳輸字節流前,先傳輸字符 "Zero Width No-Break Space"。這樣如果接收者收到 FEFF,就表明這個字節流是 Big-Endian 的;如果收到FFFE,就表明這個字節流是 Little- Endian 的。因此字符 "Zero Width No-Break Space" (“零寬無間斷間隔”)又被稱作 BOM。
UTF-8 不需要 BOM 來表明字節順序,但可以用 BOM 來表明編碼方式。字符 "Zero Width No-Break Space" 的 UTF-8 編碼是 EF BB BF。所以如果接收者收到以 EF BB BF 開頭的字節流,就知道這是 UTF-8編碼了。Windows 就是使用 BOM 來標記文本文件的編碼方式的。
字符U+FEFF如果出現在字節流的開頭,則用來標識該字節流的字節序,是高位在前還是低位在前。如果它出現在字節流的中間,則表達零寬度非換行空格的意義,用戶看起來就是一個空格。從Unicode3.2開始,U+FEFF只能出現在字節流的開頭,只能用於標識字節序,就如它的名稱——字節序標記——所表示的一樣;除此以外的用法已被捨棄。取而代之的是,使用U+2060來表達零寬度無斷空白。
類似WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字符,用於讓記事本等編輯器識別這個文件是否以UTF-8編碼。對於一般的文件,這樣並不會產生什麼麻煩。但對於 PHP來說,BOM是個大麻煩。
PHP並不會忽略BOM,所以在讀取、包含或者引用這些文件時,會把BOM作爲該文件開頭正文的一部分。根據嵌入式語言的特點,這串字符將被直接執行(顯示)出來。由此造成即使頁面的 top padding 設置爲0,也無法讓整個網頁緊貼瀏覽器頂部,因爲在html一開頭有這3個字符呢!

摘自百度百科 http://baike.baidu.com/view/935284.htm#sub10973349 & http://baike.baidu.com/view/126558.htm#sub5073178

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章