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 个 字 节 给 1 1 bit 编 码 , 使 用 3 个 字 节 给 1 6 bit 编 码 , 使 用 4 个 字 节 给 2 1 bit 编 码 , 使 用 5 个 字 节 给 2 6 bit 编 码 , 使 用 6 个 字 节 给 3 1 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 [AT] chinese.com>
[中 文 版 最 新 更 新 ]
2000/10/23
《 中 国 linux论 坛 man手 册 页 翻 译 计 划 》 :
跋
本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh