Provided by: manpages-zh_1.6.3.3-2_all bug

NAME

       charsets - 程序員對字符集和國際化的觀點

描述

       Linux  是一個國際性的操作系統。它的各種各樣實用程序和設  備驅動程序  (包括控制檯驅動程序 )
       支持多種語言的字符集,           包括帶有附加符號的拉丁字母表字符,重音符,連字(字母結合),
       和全部非拉丁文字母表(包括希臘語,古代斯拉夫語,阿拉伯語, 和希伯來語。 )

       這份手冊以程序員的眼光去看待不同的字符集標準,以及它們是如何            在           Linux
       中調和在一起的。討論的標準包括 ASCII,ISO 8859,KOI8-R , Unicode,ISO 2022 和 ISO 4873 。

ASCII

       ASCII          (,美國國家信息交換(用)標準(代)碼)           是最初的           7-bit字符集,
       原先是爲美式英語設計的。當前它被 ECMA-6 標準所描述。

       在英國使用一種                           ASCII的變體(這變體是:用英國磅值的符號代替美國的
       crosshatch/octothorpe/hash                                         的磅值符號);當需要時,
       美國的(符號)和英國的變體(符號)可以用"US ASCII"和"UK ASCII" 作爲區別。

       因爲 Linux 是爲美國設計的硬件寫的, 它生來就支持 US ASCII 。

ISO 8859

       ISO  8859  是一系列  10  8-bit  字符集,它包含美國  ASCII  的低位  (7  -bit  ),  128 ~159
       範圍內的不可見控制字符,和     96     個定寬圖形(字符)在     160-255      裏。      。LP
       這些字符集中,最重要是  ISO  8859-1  (  Latin-1  )。 它生來就被 Linux 控制檯驅動程序支持,
       X11R6 的支持得也很好,並且是 HTML 的基礎字符集。

       Linux  下控制檯也支持其他的   8859   字符集   ,通過用戶模式實用程序(   例如   setfont(8))
       來修改鍵盤綁定和     EGA     圖形表格,    以及進行控制檯驅動程序裏的字體表格中的“    user
       mapping(用戶影射)”。

       下面是每個集合簡短的描述:

       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',和(當)需要用帶有上挑筆的                   ghe
              寫正確的ghe.參見下面的(關於)KOI8-R                                       的討論。
              (譯註:這些外國人書寫習慣我們也不怎麼需要理解吧,希望上面的解釋不要 把人搞糊塗了)

       8859-6 支持阿拉伯語。      8859-6       字型表是分離字符格式的一種固定的字體,但是一個合適
              的顯示引擎應該聯合這些來使用合適的詞首,中間字母,和最後表格式。

       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 仍然比這些需要更多的 重音符號。

       8859-13 (Latin-7)

       8859-14 (Latin-8)

       8859-15
              增加了歐洲符號和法國連字,它們是 Latin-1 裏缺漏的。

KOI8-R

       KOI8-R   是在俄國流行的一個非   ISO  字符集。下半部分是  US  ASCII;  上部是比  ISO  8859-5
       設計的更好的古斯拉夫字符集。

       控制檯爲了支持 KOI8-R 字符集,在  Linux  下,  可以利用用戶模式實用程序修改鍵盤綁定和  EGA
       圖形表格, 以及在控制檯的驅動程序中使用字體表“user mapping(用戶映射)”。

UNICODE(統[單]一代碼,寬[雙]字節字符集)

       Unicode(          ISO          10646          )          是一個標準,它的目標是明白地表現
       在每種人類語言中的每種已知字符。Unicode 的編碼是 32 位的 ( 舊些的版本使用了 16 位  )  。在
       Unicode 的一些信息可以在<http://www.unicode.com>獲得。

       Linux  使用8位的  Unicode  轉移格式  (UTF-8  )  表示  Unicode 。 UTF-8 是可變長的 Unicode
       編碼。使用1個字節給 7 bit 編碼,使用2個字節給 11 bit 編碼,  使用3個字節給  16  bit
       編碼,使用4個字節給  21 bit 編碼,使用5個字節給 26 bit 編碼,使用6個字節給 31 bit
       編碼

       讓 0,1 , x 代表零,一,或任意的位。字節0xxxxxxx 代表Unicode 00000000 0xxxxxxx, 這個符號和
       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 編碼,那麼這個級數就會延伸 到 6 字節編碼)

       對於              ISO-8859-1              的用戶而言,這意味着帶高位的字符編碼成兩個字節。
       這會令普通的文本文件增大1到2個百分點。不過沒有變換問題,    因爲    Unicode    ISO-8859-1
       符號的值等於他們的        ISO-8859-1        值        (用        8         個前導零做前綴)
       。對於日語的用戶,這意味着原來常用的           16          位編碼將          佔          3
       個字節,並且還要求有擴展的映射表。許多日本人因此比較喜歡 ISO 2022 。

       注意 UTF-8 是自我同步的: 10xxxxxx 是一條尾巴, 任何其它 的字節是編碼的頭。ASCII 字節出現在
       UTF-8     流中唯一的可能是     作爲自己出現。特別是,     不會有     NULs    或    "    /'s
       嵌入在那些比較大的編碼中。

       因爲編碼中的   ASCII,特別是,   NUL    和'/',    沒有變化,    所以內核不會注意到    在使用
       UTF-8。它根本不在乎它正在處理的那字節代表什麼東西。

       Unicode       數據流的呈現通常是通過"       subfont       "表來操作,這個表是      Unicode
       的一個子集到字符表格的映射。內核內部使用 Unicode 描述裝載入顯示內存的  subfont。這意味着在
       UTF-8   中的一個模式   能使用   512   個不同的符號。這對於日語,漢語和朝鮮語來說是不夠的,
       但是它滿足了大多數其它用途。

ISO 2022 AND ISO 4873

       ISO 2022 和 4873 標準描述了一個基於 VT100 實現的字體控制模型. Linux 內核和  xterm  (1)  (
       部分 ) 支持這個模型。 它在日本和韓國很流行。

       它有  4  個圖形的字符集,稱爲  G0  ,  G1  ,  G2  和  G3  ,並且 其中之一是當前的高位爲0
       的編碼的字符集(最初     G0     ),而他們之     一是當前的高位爲1的編碼的字符集(最初     G1
       )。每種圖形的字符集有 94 或 96 個字符 ,並且是實際上是一個 7-bit字符集。 它使用 040-0177 (
       041-0176 ) 或 0240-0377 ( 0241-0376 )編碼 中的一個。G0  大小總是爲  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)  標記爲當前字符集,
       只用於下一個字符( 不管它的高位的值是什麼)

       94  字符的集合用做  Gn 字符集是用一個逃逸序列 ESC ( xx (用於 G0),ESC ) xx (用於 G1),
       ESC * xx (用於 G2),ESC + xx (用於 G3),等代表的.這裏的 xx  是一個符號  或者是在  ISO
       2375  國際註冊編碼字符集中的一對符號。  例如,ESC  ( @ 選用 ISO 646 字符集作爲GO, ESC ( A
       選用 UK 標準字符集(用磅代替數字記號), ESC ( B 選擇 ASCII ( 用美元代替流通貨幣),  ESC  (  M
       爲非洲語言選擇一個字符集, ESC ( ! A 選擇古巴字符集, 等等. 等等.

       94  字符的集合用做 Gn 字符集是用一個逃逸序列 ESC - xx (對於 G1), ESC . xx (對於 G2) 或
       ESC / xx (對於 G3)等表示. 例如, ESC - G 選擇希伯萊字母表作爲 G1.

       多字節的字符集用做 Gn 字符集是用一個逃逸序列 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

《中國linux論壇man手冊頁翻譯計劃》:

       http://cmpp.linuxforum.net

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh