字符集描述 (charmap) 源文件格式

用途

将字符符号定义为字符编码。

描述

字符集描述 (charmap) 源文件将字符符号定义为字符编码。 /usr/lib/nls/charmap 目录包含受支持语言环境的 charmap 源文件。 localedef 命令可识别 charmap 源文件中的两个部分,即 CHARMAP 部分和 CHARSETID 部分:

描述
CHARMAP 将符号字符名称映射到代码点。 此部分必须在所有其他部分之前,并且是必需的。
CHARSETID 将代码集中的代码点映射到字符集标识。 此部分是可选的。

CHARMAP 部分

charmap 文件的 CHARMAP 部分将符号字符名称映射到代码点。 所有受支持的代码集都将可移植字符集作为适当的子集。 只能在 CHARMAP 部分中定义未在可移植字符集中定义的符号。 可移植字符集由以下字符符号 (由其标准化符号名称列出) 和编码组成:

符号名称 代码 (十六进制)
<NUL> 000
<SOH>> 001
<STX> 002
<ETX> 003
<EOT> 004
<ENQ> 005
<ACK> 006
<alert> 007
<backspace> 008
<tab> 009
<new-line> 00A
<vertical-tab> 00B
<form-feed> 00C
<carriage-return> 00D
<SO> 00E
<SI> 00F
<DLE> 010
<DC1> 011
<DC2> 012
<DC3> 013
<DC4> 014
<NAK> 015
<SYN> 016
<ETB> 017
<CAN> 018
<EM> 019
<SUB> 01A
<ESC> 01B
<IS4> 01C
<IS3> 01D
<IS2> 01E
<IS1> 01F
<space> 020
<exclamation-mark> 021
<quotation-mark> 022
<number-sign> 023
<dollar-sign> 024
<percent> 025
<ampersand> 026
<apostrophe> 027
<left-parenthesis> 028
<right-parenthesis> 029
<asterisk> 02A
<plus-sign> 02B
<comma> 02C
<hyphen> 02D
<period> 02E
<slash> 02F
<zero> 030
<one> 031
<two> 032
<three> 033
<four> 034
<five> 035
<six> 036
<seven> 037
<eight> 038
<nine> 039
<colon> 03A
<semi-colon> 03B
<less-than> 03C
<equal-sign> 03D
<greater-than> 03E
<question-mark> 03F
<commercial-at> 040
<A> 041
<B> 042
<C> 043
<D> 044
<E> 045
<F> 046
<G> 047
<H> 048
<I> 049
<J> 04A
<K> 04B
<L> 04C
<M> 04D
<N> 04E
<O> 04F
<P> 050
<Q> 051
<R> 052
<S> 053
<T> 054
<U> 055
<V> 056
<W> 057
<X> 058
<Y> 059
<Z> 05A
<left-bracket> 05B
<backslash> 05C
<right-bracket> 05D
<circumflex> 05E
<underscore> 05F
<grave-accent> 060
<a> 061
<b> 062
<c> 063
<d> 064
<e> 065
<f> 066
<g> 067
<h> 068
<i> 069
<j> 06A
<k> 06B
<l> 06C
<m> 06D
<n> 06E
<o> 06F
<p> 070
<q> 071
<r> 072
<s> 073
<t> 074
<u> 075
<v> 076
<w> 077
<x> 078
<y> 079
<z> 07A
<left-brace> 07B
<vertical-line> 07C
<right-brace> 07D
<tilde> 07E
<DEL> 07F

CHARMAP 部分包含以下部分:

  • CHARMAP段标题。
  • 可选的特殊符号名称声明部分。 符号名称和值必须由一个或多个空白字符分隔。 以下是特殊符号名称及其含义:
    描述
    <code_set_name> 指定为其定义 charmap 文件的编码字符集的名称。 此值确定 nl_langinfo 子例程返回的值。 必须使用可移植字符集中的任何字符 (控制字符和空格字符除外) 来指定 <code_set_name>
    <mb_cur_max> 指定编码字符集的多字节字符中的最大字节数。 有效值为 1 到 4。 缺省值为 1。
    <mb_cur_min> 指定编码字符集的多字节字符中的最小字节数。 由于所有受支持的代码集都将可移植字符集作为正确的子集,因此此值必须为 1。
    <escape_char> 指定以十六进制或八进制表示法指示编码的转义字符。 缺省值为 \ (反斜杠)。
    <注释字符 指定用于指示 charmap 文件中的注释的字符。 缺省值为 # (井号)。 除了字符符号编码后的可选注释之外,注释必须以行的第一列中的注释字符开头。
  • 定义的代码集的字符集映射语句。

    此部分中的每个语句都定义了字符编码的符号名称。 字符符号以<(小于) 字符并以>(大于) 字符。 之间的字符<(小于) 和>(大于) 可以是可移植字符集中的任何字符,但控制字符和空格字符除外。 该>如果使用转义字符 (由 <escape_char> 特殊符号名称指定) 对其进行转义,那么可以使用 (大于) 字符。 字符符号长度不能超过 32 个字符。

    字符符号定义的格式为:

    <char_symbol>   encoding
          optional comment
    编码指定为一个或多个字符常量,具有 <mb_cur_max> 特殊符号名称指定的最大字符常量数。 localedef 命令支持具有以下格式的十进制,八进制和十六进制常量:
    hexadecimal constant   \xddd
    octal constant         \oddd
    decimal constant       \dddd
    字符符号定义的一些示例如下:
    <A>            \d65             decimal constant
    <B>            \x42             hexadecimal constant
    <j10101>       \x81\d254        mixed hex and decimal constants
    还可以定义一个或多个符号名称和相应编码值的范围,其中每个符号名称的非数字前缀是公共的,并且第二个符号名称的数字部分等于或大于第一个符号名称的数字部分。 在此格式中,符号名称值由零个或多个非数字字符组成,后跟一个或多个十进制数字的整数。 此格式定义一系列符号名称。 例如,字符串<j0101>...<j0104>被解释为<j0101>,<j0102>,<j0103><j0104>符号名称,按该顺序排列。

    在定义符号名称范围的语句中,编码值是范围中第一个符号名称的值。 后续符号名称具有递增顺序的编码值。 例如:

    <j0101>...<j0104>     \d129\d254
    此字符集映射语句解释如下:
    <j0101>         \d129\d254
    <j0102>         \d129\d255
    <j0103>         \d130\d0
    <j0104>         \d130\d1
    符号名称必须唯一,但两个或多个符号名称可以具有相同的值。
  • END CHARMAP部分拖车。

示例

以下是 charmap 文件中可能的 CHARMAP 部分的示例:

CHARMAP
<code_set_name>          ISO8859-1
<mb_cur_max>             1
<mb_cur_min>             1
<escape_char>            \
<comment_char>           #
<NUL>                        \x00
<SOH>                        \x01
<STX>                        \x02
<ETX>                        \x03
<EOT>                        \x04
<ENQ>                        \x05
<ACK>                        \x06
<alert>                      \x07
<backspace                   \x09
<tab>                        \x09
<newline>                    \x0a
<vertical-tab>               \x0b
<form-feed>                  \x0c
<carriage-return>            \x0d
END CHARMAP

CHARSETID 部分

CHARSETID 部分将代码集中的代码点映射到字符集标识。 CHARSETID 部分包含以下部分:

  • CHARSETID段标题。
  • 定义的代码集的字符集标识映射。
  • END CHARSETID部分拖车。

通过列出符号名称或符号名称的代码点及其关联的字符集标识来定义字符集标识映射。 以下是字符集标识映射语句的可能格式:

<character_symbol>                               number
<character_symbol>...<character_symbol>          number
character_constant                               number
character_constant...character_constant          number

<character_symbol>必须先前已在 CHARMAP 部分中定义。 该character_constant必须遵循为 CHARMAP 部分描述的格式。

通过指示符号名称 (在 CHARMAP 部分或可移植字符集中定义) 后跟字符集标识,或指示与符号名称关联的代码点后跟字符集标识值来实现个别字符集映射。 符号名称和代码点必须与字符集标识值用一个或多个空白字符分隔。 通过指示符号名称和代码点值的相应组合作为范围的端点,可以将代码点的范围映射到字符集标识值,并以...(省略号) 以指示中间字符,后跟范围的字符集标识。 第一个端点值必须小于或等于第二个端点值。

示例

以下是 charmap 文件中可能的 CHARSETID 部分的示例:

CHARSETID
<space>...<nobreakspace>           0
<tilde>...<y-diaeresis>            1
END CHARSETID