geniconvtbl - 生成代码转换表
geniconvtbl [-fnq] [-p preprocessor] [-W arg] [-Dname] [-Dname=def] [-Idirectory] [-Uname] [infile]...
geniconvtbl [-fnq] -c -F [infile]...
geniconvtbl [-fnq] -c -T [infile]...
geniconvtbl 实用程序接受在纯文本文件中定义的代码转换规则并编写可用于支持用户定义的 iconv 代码转换、cconv 代码转换或两者的代码转换二进制表文件(有关 iconv 代码转换的更多详细信息,请参见 iconv(1)、iconv(3C) 和 cconv(3C))。
输入和输出文件可以使用两种不同的格式:
提供了 –c 选项时,geniconvtbl 将接受一个或多个 infile 或标准输入流(其格式如 geniconvtbl-cconv(5) 中所述),并将为 cconv 和 iconv 代码转换生成 cconv 二进制表文件。
iconv 二进制表基本上仅适用于基于缓冲区的 iconv 代码转换,与之不同,cconv 二进制表是基于单字符序列的,同时适用于 iconv 和 cconv 代码转换。
支持以下选项:
生成 cconv 代码转换表。
如果输出文件已存在,则覆盖该输出文件。
与 –c 选项一起,指明转换方向是从 UTF-32 转换为代码集。如果没有 –c 选项,则将忽略该选项并显示一条警告消息。
不生成输出文件。在检查输入文件的内容时这比较有用。
使用指定的 preprocessor 而不是使用缺省的预处理程序 /usr/lib/cpp。
静默选项。此选项抑制警告和错误消息。
与 –c 选项一起,指明转换方向是从代码集转换为 UTF-32。如果没有 –c 选项,则将忽略该选项并显示一条警告消息。
将参数 arg 传递到预处理程序。如果多次指定了此选项,会将所有参数传递到预处理程序。
geniconvtbl 可识别这些选项并将它们及其参数传递到预处理程序。
支持下列操作数:
输入文件的路径名称。如果未指定输入文件,geniconvtbl 将从标准输入流中读取输入。如果需要,用户可以指定多个输入文件。
如果从标准输入流中读取输入,geniconvtbl 会将输出写入到标准输出流中。如果指定了一个或多个输入文件,geniconvtbl 会从每个输入文件中读取输入并将输出写入到相应的输出文件中。每个输出文件名都与相应输入文件相同,但附加了 .bt 或者用 .bt 取代了以 . 字符开头的后缀。
为了使用在不指定 –c 选项的情况下生成的 iconv 二进制表文件作为 iconv(1) 和 iconv(3C) 的代码转换模块,必须将它们移至以下目录:
/usr/lib/iconv/geniconvtbl/binarytables/
该目录中的文件名必须以一个或多个可输出的 ASCII 字符开头作为 fromcode 名称,后跟一个百分比字符 (%),然后跟有一个或多个可输出的 ASCII 字符作为 tocode 名称,最后以后缀 .bt 结尾。fromcode 和 tocode 名称用于标识 iconv(1) 和 iconv_open(3C) 中的 iconv 代码转换。
为了使用通过指定 –c 选项生成的 cconv 二进制表文件,必须将它们移至以下目录:
/usr/lib/iconv/
cconv 二进制表文件应该是成对的,分别提供从 UTF-32 到代码集的转换(使用 "–c –F" 选项按以下命名惯例生成):
UTF-32+<codeset>.bt
以及从代码集到 UTF-32 的转换(使用 "–c –T" 选项按以下命名惯例生成):
<codeset>+UTF-32.bt
其中 <codeset> 应为表示代码集名称的一个或多个可输出 ASCII 字符。
以下示例生成输出文件名称为 convertA2B.bt 的代码转换二进制表:
example% geniconvtbl convertA2B示例 2 生成多个 iconv 代码转换二进制表
以下示例生成两个代码转换二进制表,其输出文件分别为 test1.bt 和 test2.bt:
example% geniconvtbl test1 test2示例 3 使用另一个预处理程序
在指定的预处理程序处理了输入文件后,以下示例会生成代码转换二进制表:
example% geniconvtbl -p /opt/SUNWspro/bin/cc -W -E convertB2A示例 4 为 iconv 放置二进制表
要使用在上面的第一个示例中创建的二进制表作为 "fromcode" ABC 到 "tocode" DEF 的转换引擎,首先需成为超级用户,然后重命名该二进制表,并将其按如下方式放置:
example# mv convertA2B.bt \ /usr/lib/iconv/geniconvtbl/binarytables/ABC%DEF.bt示例 5 提供修改的 ISO8859-1 到 UTF-8 代码转换
编写定义了代码转换的 geniconvtbl 源文件。例如,您可以将 /usr/lib/iconv/geniconvtbl/srcs/ISO8859-1_to_UTF-8.src 复制到您的目录中,然后在该源文件中进行必要的更改。在进行修改后,生成二进制表:
example% geniconvtbl ISO8859-1_to_UTF-8.src
作为超级用户,将生成的具有唯一名称的二进制表放置在 iconv_open(3C) 可以在其中找到该二进制表的系统目录中:
example su Password: example% cp ISO8859-1_to_UTF-8.bt \ /usr/lib/iconv/geniconvtbl/binarytables/my-iso-8859-1%utf-8.bt
之后,您可以执行 iconv 代码转换。例如:
example% iconv -f my-iso-8859-1 -t utf-8 testfile.txt示例 6 生成 cconv 代码转换二进制表
以下示例生成输出文件名称为 UTF-32+my8859-11.bt 的代码转换二进制表:
example% geniconvtbl -c -F UTF-32+my8859-11.TXT
以下示例生成输出文件名称为 my8859-11+UTF-32.bt 的代码转换二进制表:
example% geniconvtbl -c -T my8859-11+UTF-32.TXT示例 7 为 cconv 放置二进制表
要使用在示例 6 中创建的 cconv 二进制表进行 cconv 和 iconv 代码转换,首先需要成为超级用户,然后将文件放置到 /usr/lib/iconv 之下:
example# mv my8859-11+UTF-32.bt UTF-32+my8859-11.bt \ /usr/lib/iconv/
之后,您不仅可以在 UTF-32 与 my8859-11 之间,还可以在 my8859-11 与在系统中安装了相应 cconv 二进制表文件的其他任何代码集名称之间执行 iconv 和 cconv 代码转换。
有关影响 geniconvtbl 执行的环境变量 LANG 和 LC_CTYPE 的说明,请参见 environ(7)。
将返回以下退出值:
没有发生任何错误,输出文件已成功创建。
未正确使用命令行选项,或指定了未知的命令行选项。
指定的输入或输出文件无效。
输入文件中的转换规则未正确定义。
已经达到了输入文件的转换规则限制。请参见 geniconvtbl(5) 的“附注”部分。
没有更多的系统资源错误。
内部错误。
有关下列属性的说明,请参见 attributes(7):
|
cpp(1)、iconv(1)、localedef(1)、cconv(3C)、cconv_close(3C)、cconv_open(3C)、cconvctl(3C)、iconv(3C)、iconv_close(3C)、iconv_open(3C)、iconvctl(3C). geniconvtbl(5)、geniconvtbl-cconv(5)、attributes(7)、environ(7)
International Language Environments Guide for Developers
所生成的并正确放置的输出文件(/usr/lib/iconv/*.bt 和 /usr/lib/iconv/geniconvtbl/binarytables/*.bt)可用于 32 位和 64 位环境。
如果您覆盖在安装 Solaris 的过程中放入 /usr/lib/iconv 目录中的文件,则将在系统更新期间覆盖您的模块。