Provided by:
manpages-zh_1.5-1_all 
NAME
charsets - 程式對字符集和國際化的觀點
yz
Linux 是一荌篕琠坁漣@業系統。它的各種各樣實用程式和設 備驅動程式
(包括控制台驅動程式 ) 支持多種語言的字符集,
包括帶有附加符號的拉丁字母表字符,奏符,連字(字母結合),
和全部非拉丁文字母表(包括希臘語,古代斯拉夫語,阿拉伯語, 和希伯來語。
)
這份手冊以程式的眼光去看待不同的字符集標準,以及它怓O如何 在 Linux
中調和在一起的。討論的標準包括 ASCII,ISO 8859,KOI8-R , Unicode,ISO
2022 和 ISO 4873 。
ASCII
ASCII (,美國國家信息交換(用)標準(代)碼) 是最初的 7-bit字符集,
鴠是為美式^語設p的。當前它被 ECMA-6 標準所描z。
在^國使用一種 ASCII的變體(這變體是:用^國磅熔顫馴N替美國的
crosshatch/octothorpe/hash 的磅顫飽^;當需n時, 美國的(符號)和-
^國的變體(符號)可以用"US ASCII"和"UK ASCII" 作為區別。
因為 Linux 是為美國設p的硬體寫的, 它生來就支持 US ASCII 。
ISO 8859
ISO 8859 是一系列 10 8-bit 字符集,它包含美國 ASCII 的低位 (7 -bit ),
128 ~159 S圍內的不可見控制字符,和 96 茤w寬圖形(字符)在 160-255 裏。
。LP 這些字符集中,最南是 ISO 8859-1 ( Latin-1 )。 它生來就被 Linux
控制台驅動程式支持, X11R6 的支持得也很好,並且是 HTML 的基礎字符集。
Linux 下控制台也支持其他的 8859 字符集 ,通過使用者模式實用程式( 例如
setfont(8)) 來蚹嬼雿L綁定和 EGA 圖形表格,
以及進行控制台驅動程式裏的字型表格中的「user mapping(使用者影射)」。
下惇O每荈隻X簡短的描z:
8859-1 (Latin-1)
Latin-1 覆蓋大多數的西歐語言,比如阿爾巴尼亞, 加泰羅尼亞語,
丹麥, 荷蘭,^語,法羅群島,芬蘭,法語,德語,加利西亞,愛爾蘭,冰島,
意大利,挪威,葡萄牙,西班牙和瑞典。缺少荷蘭的
ij連字(i與j合字) , 法國的 oe(o與e合字)和舊榆瑼',,'
而德語中``(這樣的)引號是可以的。
8859-2 (Latin-2)
Latin-2 支持大多數的拉丁文書寫的斯拉夫語和中歐的語言: 克羅地亞
, 捷克語, 德語, 匈牙利, 波蘭,羅馬尼亞,斯洛伐克,
和斯洛文尼亞。
8859-3 (Latin-3)
Latin-3 是世界語,加裏西亞 , 馬耳他人,
和土耳其語作者受歡迎的(語言)。
8859-4 (Latin-4)
Latin-4 介紹了愛沙尼亞語,拉托維亞,和立陶宛的字符
。它是實質上過時的; 參見 8859-10 (Latin-6 ) 。
8859-5 古代斯拉夫語字母支持保加利亞語, 白俄羅斯語,馬其頓語, 俄語,
塞爾維亞語和烏克蘭語。
烏克蘭人讀帶有下挑筆的`geh'為`heh',和(當)需n用帶有上挑筆的 ghe
寫正確的ghe.參見下悸滿]關於)KOI8-R 的討論。
(譯注:這些外國人書寫習慣我怳]不怎麼需n理解吧,希望上悸爾挭壑τ
把人搞糊塗了)
8859-6 支持阿拉伯語。 8859-6
字型表是分離字符格式的一種固定的字型,但是一茼X適
的顯示引擎應該聯合這些來使用合適的詞滿A中間字母,和最後表格式。
8859-7 支持現代的希臘語。
8859-8 支持希伯來語。
8859-9 (Latin-5)
這是Latin-1
的一種變體,它用土耳其語的一些(字符)代替很少用的冰島語。
8859-10 (Latin-6)
Latin 6 增加末因紐特(譯:對於last Inuit 我不知道是否是對的)
(格陵蘭語) 和 Sami ( 拉普蘭語 ) ,這些是 Lattin 4
中缺少的,來覆蓋整茈_歐地區(的字符集)。 RFC 1345
列出了初步的和不同的「 latin 6 "。 Skolt Sami 仍然比這些需-
n更多的 奏符號。
8859-13 (Latin-7)
8859-14 (Latin-8)
8859-15
增加了歐洲符號和法國連字,它怓O Latin-1 裏缺漏的。
KOI8-R
KOI8-R 是在俄國流行的一茷D ISO 字符集。下半部分是 US ASCII; 上部是比
ISO 8859-5 設p的更好的古斯拉夫字符集。
控制台為了支持 KOI8-R 字符集,在 Linux 下, 可以利用使用者模式實用程式-
蚹嬼雿L綁定和 EGA 圖形表格, 以及在控制台的驅動程式中使用字型表「user
mapping(使用者映射)」。
UNICODE,[http://www.unicode.com>獲得。
Linux 使用8位的 Unicode 轉移格式 (UTF-8 ) 表示 Unicode 。 UTF-8
是可變長的 Unicode 編碼。使用1茼r節給 7 bit 編碼,使用2茼r節給 11
bit 編碼, 使用3茼r節給 16 bit 編碼,使用4茼r節給 21 bit
編碼,使用5茼r節給 26 bit 編碼,使用6茼r節給 31 bit 編碼
讓 0,1 , x 代表零,一,或任意的位。字節0xxxxxxx 代表Unicode 00000000
0xxxxxxx, 這茞顫鼎M ASCII 0xxxxxxx 編碼的符號是一樣。 這樣, ASCII
沒有改為 UTF-8,並且只用 ASCII 的人不會注意到任何變化:
不在代碼,並且不在檔案大小。
字節 110xxxxx 是一2 字節代碼的開始, 110xxxxx 10yyyyyy 組裝成 00000xxx
xxyyyyyy 。 字節 1110xxxx 是一 3 字節代碼的開始, 1110xxxx 10yyyyyy
10zzzzzz 被組裝成 xxxxyyyy yyzzzzzz。 (如果 UTF-8 使用 31-bit ISO
10646 編碼,那麼這荅髒N會延伸 到 6 字節編碼)
對於 ISO-8859-1 的使用者而言,這意味著帶高位的字符編碼成兩茼r節。
這會令普通的純文字檔增大1到2茼吨擢I。不過沒有變換問題, 因為 Unicode
ISO-8859-1 符號的巧韞L怐 ISO-8859-1 (用 8 茷e導零做前綴)
。對於日語的使用者,這意味著鴩荓`用的 16 位編碼將 佔 3 茼r節,並且還-
n求有擴展的映射表。許多日本人因此比較喜歡 ISO 2022 。
注意 UTF-8 是自我同步的: 10xxxxxx 是一條尾巴, 任何其它
的字節是編碼的頭。ASCII 字節出現在 UTF-8 流中唯一的可能是
作為自己出現。特別是, 不會有 NULs 或 " /'s 嵌入在那些比較大的編碼中。
因為編碼中的 ASCII,特別是, NUL 和'/', 沒有變化, 所以核心不會注意到
在使用 UTF-8。它根本不在乎它正在處理的那字節代表什麼東西。
Unicode 數據流的呈現通常是通過" subfont "表來操作,這茠磹O Unicode
的一茪l集到字符表格的映射。核心內部使用 Unicode 描z裝載入顯示記憶體的
subfont。這意味著在 UTF-8 中的一蚍狾 能使用 512
茪ㄕP的符號。這對於日語,漢語和朝鮮語來說是不夠的,
但是它滿足了大多數其它用途。
ISO 2022 AND ISO 4873
ISO 2022 和 4873 標準描z了一荌簼 VT100 實現的字型控制模型. Linux
核心和 xterm (1) ( 部分 ) 支持這蚍珓活C 它在日本和韓國很流行。
它有 4 蚢洇峈漲r符集,稱為 G0 , G1 , G2 和 G3 ,並且
其中之一是當前的高位為0 的編碼的字符集(最初 G0 ),而他怳
一是當前的高位為1的編碼的字符集(最初 G1 )。每種圖形的字符集有 94 或 96
茼r符 ,並且是實際上是一 7-bit字符集。 它使用 040-0177 ( 041-0176 ) 或
0240-0377 ( 0241-0376 )編碼 中的一荂CG0 大小總是為 94,並且使用
041-0176 之間的編碼。
字符之間切換用轉換(shift functions)功能 ^N (SO 或 LS1), ^O (SI 或
LS0), ESC n (LS2), ESC o (LS3), ESC N (SS2), ESC O (SS3), ESC ~ (LS1R),
ESC } (LS2R), ESC | (LS3R). LSn
把字符集Gn標記為當前字符集,用於高位為0的編碼。 LSnR 把字符集
Gn標記為當前字符集,用於高位為1的編碼。 SSn 把字符集Gn (n=2 or 3)
標記為當前字符集, 只用於下一茼r符( 不管它的高位的O什麼)
94 字符的集合用做 GnrO@khC ESC ( xx ] G0^AESC )
xx ] G1^A ESC * xx ] G2^AESC + xx ]奇
G3^ANDo xx O@ Ob ISO 2375
`UsXr@C pAESC ( @ ISO 646
r@GOA ESC ( A UK r(SNrO), ESC ( B
ASCII ( Nyqf), ESC ( M Dwy@rA ESC
( ! A jr, . .
94 字符的集合用做 GnrO@khC ESC - xx ] G1^, ESC .
xx ] G2^ ESC / xx ] G3^D p, ESC - G
Br@ G1.
多字節的字符集用做 Gn 字符集是用一荌k逸序列 ESC $ xx 或者 ESC $ ( xx
(對於 G0), ESC $ ) xx (對於 G1),ESC $ * xx (對於 G2),ESC $ +
xx (對於 G3)等來表示. 例如, ESC $ ( C 為 G0選擇韓國字符集.
日本字符集合由 ESC $ B選擇 更多臨近的版本由ESC & @ ESC $ B選擇.
ISO 4873 規定了一紎圍比較窄的使用字符集,它的 G0是固定的 (總是 ASCII),
所以 G1, G2 和 G3只能被調用於高次序位編碼集。 尤其是,不再使用 ^N 和
^O,ESC ( xx 僅用於 xx=B, 和 ESC ) xx, ESC * xx, ESC + xx 分別等價於
ESC - xx, ESC . xx, ESC / xx.
考
console(4), console_ioctl(4), console_codes(4), ascii(7),
iso_8859_1(7), unicode(7), utf-8(7)
[]
Scorpio <rawk@chinese.com>
[]
2000/10/23
mlinuxan:
http://cmpp.linuxforum.net