?? utf-8 and unicode faq.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0144)http://cache.baidu.com/c?word=unicode&url=http%3A//www%2Elinuxforum%2Enet/books/UTF%2D8%2DUnicode%2Ehtml&p=9857cb5380904eac2abd9b7f5c&user=baidu -->
<!--STATUS OK--><HTML><HEAD><TITLE>UTF-8 and Unicode FAQ</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<FORM action=http://www.baidu.com/s>
<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
<BODY>
<TABLE cellPadding=0 width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD width=254><A href="http://www.baidu.com/"><IMG alt=到百度首頁
src="UTF-8 and Unicode FAQ.files/logo-kz.gif" border=0></A></TD>
<TD><FONT color=black size=-1><INPUT
style="FONT-SIZE: 16px; FONT-FAMILY: Verdana,Arial,Helvetica,sans-serif"
size=30 name=wd> <INPUT type=submit value=百度一下></FONT> </TD></TR>
<TR>
<TD colSpan=2><FONT color=black size=-1>您的查詢字詞都已標明如下:<B
style="COLOR: black; BACKGROUND-COLOR: #ffff66"><A
href="http://cache.baidu.com/c?word=unicode&url=http%3A//www%2Elinuxforum%2Enet/books/UTF%2D8%2DUnicode%2Ehtml&p=9857cb5380904eac2abd9b7f5c&user=baidu#baidusnap0">unicode</A> </B>
(點擊查詢詞,可以跳到它在文中首次出現的位置) <BR>如果您想保存該頁面,可以<A
onclick="window.open('http://cang.baidu.com/do/add?it='+encodeURIComponent(document.title)+'&iu='+encodeURIComponent(location.href)+'&fr=ps#nw=1','_s','scrollbars=no,width=600,height=450,right=75,top=20,status=no,resizable=yes'); return false;"
href="http://cang.baidu.com/do/add" target=_blank><FONT
style="TEXT-DECORATION: underline" color=blue>添加到搜藏</FONT></A><BR><FONT
color=gray>(百度和網頁<A
href="http://www.linuxforum.net/books/UTF-8-Unicode.html"><FONT
color=blue>http://www.linuxforum.net/books/UTF-8-Unicode.html</FONT></A>的作者無關,不對其內容負責。百度快照謹為網絡故障時之索引,不代表被搜索網站的即時頁面。)</FONT></FONT>
</TD></TR></TBODY></TABLE></FORM>
<HR>
<LINK href="http://www.cl.cam.ac.uk/~mgk25/" rel=Up>
<META
content="Unicode, ISO 10646-1, UCS, X11, X Window System, Linux, Unix, POSIX, character sets, ISO 8859-1, xterm"
name=keywords>
<META
content="All you need to know to use Unicode/UTF-8 on Unix and Linux systems."
name=description>
<H1><FONT face="Times New Roman">UTF-8 and <A name=baidusnap0></A><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> FAQ</FONT></H1>
<P>by <A href="http://www.cl.cam.ac.uk/~mgk25/">Markus Kuhn</A> </P><A
href="http://www.linuxforum.net/">中國LINUX論壇</A>翻譯小組 xLoneStar[譯] 2000年2月
<P>這篇文章說明了在 POSIX 系統 (Linux,Unix) 上使用 <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B>/UTF-8 所需要的信息.
在將來不遠的幾年里, <B style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B>
已經很接近于取代 ASCII 與 Latin-1 編碼的位置了. 它不僅允許你處理處理事實上存在于地球上的任何語言文字, 而且提供了一個全面的數學與技術符號集,
因此可以簡化科學信息交換.</P>
<P>UTF-8 編碼提供了一種簡便而向后兼容的方法, 使得那種完全圍繞 ASCII 設計的操作系統, 比如 Unix, 也可以使用 <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B>. UTF-8 就是 Unix,
Linux 已經類似的系統使用 <B style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B>
的方式. 現在是你了解它的時候了.</P>
<H2>什么是 UCS 和 ISO 10646?</H2>
<P>國際標準 <STRONG>ISO 10646</STRONG> 定義了 <STRONG>通用字符集 (Universal Character Set,
UCS)</STRONG>. UCS 是所有其他字符集標準的一個超集. 它保證與其他字符集是雙向兼容的. 就是說, 如果你將任何文本字符串翻譯到 UCS格式,
然后再翻譯回原編碼, 你不會丟失任何信息.</P>
<P>UCS 包含了用于表達所有已知語言的字符. 不僅包括拉丁語,希臘語, 斯拉夫語,希伯來語,阿拉伯語,亞美尼亞語和喬治亞語的描述, 還包括中文,
日文和韓文這樣的象形文字, 以及 平假名, 片假名, 孟加拉語, 旁遮普語果魯穆奇字符(Gurmukhi), 泰米爾語, 印.埃納德語(Kannada),
Malayalam, 泰國語, 老撾語, 漢語拼音(Bopomofo), Hangul, Devangari, Gujarati, Oriya, Telugu
以及其他數也數不清的語. 對于還沒有加入的語言, 由于正在研究怎樣在計算機中最好地編碼它們, 因而最終它們都將被加入. 這些語言包括 Tibetian,
高棉語, Runic(古代北歐文字), 埃塞俄比亞語, 其他象形文字, 以及各種各樣的印-歐語系的語言, 還包括挑選出來的藝術語言比如 Tengwar,
Cirth 和 克林貢語(Klingon). UCS 還包括大量的圖形的, 印刷用的, 數學用的和科學用的符號, 包括所有由 TeX, Postscript,
MS-DOS,MS-Windows, Macintosh, OCR 字體, 以及許多其他字處理和出版系統提供的字符.</P>
<P>ISO 10646 定義了一個 31 位的字符集. 然而, 在這巨大的編碼空間中, 迄今為止只分配了前 65534 個碼位 (0x0000 到
0xFFFD). 這個 UCS 的 16位子集稱為 <STRONG>基本多語言面 (Basic Multilingual Plane,
BMP)</STRONG>. 將被編碼在 16 位 BMP 以外的字符都屬于非常特殊的字符(比如象形文字), 且只有專家在歷史和科學領域里才會用到它們.
按當前的計劃, 將來也許再也不會有字符被分配到從 0x000000 到 0x10FFFF 這個覆蓋了超過 100 萬個潛在的未來字符的 21
位的編碼空間以外去了. ISO 10646-1 標準第一次發表于 1993 年, 定義了字符集與 BMP 中內容的架構. 定義 BMP 以外的字符編碼的第二部分
ISO 10646-2 正在準備中, 但也許要過好幾年才能完成. 新的字符仍源源不斷地加入到 BMP 中, 但已經存在的字符是穩定的且不會再改變了.</P>
<P>UCS 不僅給每個字符分配一個代碼, 而且賦予了一個正式的名字. 表示一個 UCS 或 <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> 值的十六進制數, 通常在前面加上
"U+", 就象 U+0041 代表字符"拉丁大寫字母A". UCS 字符 U+0000 到 U+007F 與 US-ASCII(ISO 646) 是一致的,
U+0000 到 U+00FF 與 ISO 8859-1(Latin-1) 也是一致的. 從 U+E000 到 U+F8FF, 已經 BMP
以外的大范圍的編碼是為私用保留的.</P>
<H2>什么是組合字符?</H2>
<P>UCS里有些編碼點分配給了 <STRONG>組合字符</STRONG>.它們類似于打字機上的無間隔重音鍵. 單個的組合字符不是一個完整的字符.
它是一個類似于重音符或其他指示標記, 加在前一個字符后面. 因而, 重音符可以加在任何字符后面. 那些最重要的被加重的字符,
就象普通語言的正字法(orthographies of common languages)里用到的那種, 在 UCS 里都有自己的位置,
以確保同老的字符集的向后兼容性. 既有自己的編碼位置, 又可以表示為一個普通字符跟隨一個組合字符的被加重字符, 被稱為
<STRONG>預作字符(precomposed characters)</STRONG>. UCS 里的預作字符是為了同沒有預作字符的舊編碼, 比如 ISO
8859, 保持向后兼容性而設的. 組合字符機制允許在任何字符后加上重音符或其他指示標記, 這在科學符號中特別有用, 比如數學方程式和國際音標字母,
可能會需要在一個基本字符后組合上一個或多個指示標記.</P>
<P>組合字符跟隨著被修飾的字符. 比如, 德語中的元音變音字符 ("拉丁大寫字母A 加上分音符"), 既可以表示為 UCS 碼 U+00C4 的預作字符,
也可以表示成一個普通 "拉丁大寫字母A" 跟著一個"組合分音符":U+0041 U+0308 這樣的組合. 當需要堆疊多個重音符,
或在一個基本字符的上面和下面都要加上組合標記時, 可以使用多個組合字符. 比如在泰國文中, 一個基本字符最多可加上兩個組合字符.</P>
<H2>什么是 UCS 實現級別?</H2>
<P>不是所有的系統都需要支持象組合字符這樣的 UCS 里所有的先進機制. 因此 ISO 10646 指定了下列三種實現級別:
<DL>
<DT>級別1
<DD>不支持組合字符和 Hangul Jamo 字符 (一種特別的, 更加復雜的韓國文的編碼, 使用兩個或三個子字符來編碼一個韓文音節)
<DT>級別2
<DD>類似于級別1, 但在某些文字中, 允許一列固定的組合字符 (例如, 希伯來文, 阿拉伯文, Devangari, 孟加拉語, 果魯穆奇語,
Gujarati, Oriya, 泰米爾語, Telugo, 印.埃納德語, Malayalam, 泰國語和老撾語). 如果沒有這最起碼的幾個組合字符,
UCS 就不能完整地表達這些語言.
<DT>級別3
<DD>支持所有的 UCS 字符, 例如數學家可以在任意一個字符上加上一個 tilde(顎化符號,西班牙語字母上面的~)或一個箭頭(或兩者都加).
</DD></DL>
<H2>什么是 <B style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B>?</H2>
<P>歷史上, 有兩個獨立的, 創立單一字符集的嘗試. 一個是<A href="http://www.iso.ch/">國際標準化組織(ISO)</A>的
ISO 10646 項目, 另一個是由(一開始大多是美國的)多語言軟件制造商組成的協會組織的 <A
href="http://www.unicode.org/"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> 項目</A>. 幸運的是,
1991年前后, 兩個項目的參與者都認識到, 世界不需要兩個不同的單一字符集. 它們合并雙方的工作成果, 并為創立一個單一編碼表而協同工作.
兩個項目仍都存在并獨立地公布各自的標準, 但 <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> 協會和 ISO/IEC JTC1/SC2
都同意保持 <B style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> 和 ISO 10646
標準的碼表兼容, 并緊密地共同調整任何未來的擴展.</P>
<H2>那么 <B style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> 和 ISO
10646 不同在什么地方?</H2>
<P><B style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> 協會公布的 <A
href="http://www.unicode.org/unicode/standard/standard.html"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> 標準</A> 嚴密地包含了 ISO
10646-1 實現級別3的基本多語言面. 在兩個標準里所有的字符都在相同的位置并且有相同的名字.</P>
<P><B style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B>
標準額外定義了許多與字符有關的語義符號學, 一般而言是對于實現高質量的印刷出版系統的更好的參考. <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B>
詳細說明了繪制某些語言(比如阿拉伯語)表達形式的算法, 處理雙向文字(比如拉丁與希伯來文混合文字)的算法和 排序與字符串比較 所需的算法,
以及其他許多東西.</P>
<P>另一方面, ISO 10646 標準, 就象廣為人知的 ISO 8859 標準一樣, 只不過是一個簡單的字符集表. 它指定了一些與標準有關的術語,
定義了一些編碼的別名, 并包括了規范說明, 指定了怎樣使用 UCS 連接其他 ISO 標準的實現, 比如 ISO 6429 和 ISO 2022. 還有一些與
ISO 緊密相關的, 比如 ISO 14651 是關于 UCS 字符串排序的.</P>
<P>考慮到 <B style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B>
標準有一個易記的名字, 且在任何好的書店里的 Addison-Wesley 里有, 只花費 ISO 版本的一小部分, 且包括更多的輔助信息,
因而它成為使用廣泛得多的參考也就不足為奇了. 然而, 一般認為, 用于打印 ISO 10646-1 標準的字體在某些方面的質量要高于用于打印 <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> 2.0的.
專業字體設計者總是被建議說要兩個標準都實現, 但一些提供的樣例字形有顯著的區別. ISO 10646-1 標準同樣使用四種不同的風格變體來顯示表意文字如中文,
日文和韓文 (CJK), 而 <B style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B>
2.0 的表里只有中文的變體. 這導致了普遍的認為 <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> 對日本用戶來說是不可接收的傳說,
盡管是錯誤的.</P>
<H2>什么是 UTF-8?</H2>
<P>首先 UCS 和 <B style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B>
只是分配整數給字符的編碼表. 現在存在好幾種將一串字符表示為一串字節的方法. 最顯而易見的兩種方法是將 <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">Unicode</B> 文本存儲為 2 個 或 4
個字節序列的串. 這兩種方法的正式名稱分別為 UCS-2 和 UCS-4. 除非另外指定, 否則大多數的字節都是這樣的(Bigendian
convention). 將一個 ASCII 或 Latin-1 的文件轉換成 UCS-2 只需簡單地在每個 ASCII 字節前插入 0x00. 如果要轉換成
UCS-4, 則必須在每個 ASCII 字節前插入三個 0x00.</P>
<P>在 Unix 下使用 UCS-2 (或 UCS-4) 會導致非常嚴重的問題. 用這些編碼的字符串會包含一些特殊的字符, 比如 '\0' 或 '/',
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -