这是可以在 OnWorks 免费托管服务提供商中使用我们的多个免费在线工作站之一运行的命令 enc2xs,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
enc2xs -- Perl 编码模块生成器
概要
enc2xs -[选项]
enc2xs -M ModName 映射文件...
enc2xs-C
商品描述
编码2xs 构建一个 Perl 扩展,供来自 Unicode 字符映射的 Encode 使用
文件 (.ucm) 或 Tcl 编码文件 (.enc)。 除了在构建期间在内部使用
Encode 模块的过程,你可以使用 编码2xs 将您自己的编码添加到 perl。 不
XS的知识是必要的。
快速 产品指南
如果您想尽可能少地了解 Perl 但需要添加新的编码,只需
阅读本章并忘记其余部分。
0. 准备好 .ucm 文件。 你可以从某个地方得到它,或者你可以从
从头开始,或者您可以从 Encode 发行版中获取一个并对其进行自定义。 为了
UCM 格式,见下一章。 在下面的示例中,我将调用我的理论
编码 myascii,定义在 我的.ucm. "$" 是一个 shell 提示。
$ ls-F
我的.ucm
1. 发出如下命令;
$ enc2xs -M 我的 my.ucm
生成Makefile.PL
生成 My.pm
生成自述文件
产生变化
现在看看你的当前目录。 它应该是这样的。
$ ls-F
Makefile.PL my.pm my.ucm t/
创建了以下文件。
Makefile.PL - MakeMaker 脚本
My.pm - 编码子模块
t/My.t - 测试文件
1.1.
如果您想将*.ucm 与模块一起安装,请执行以下操作;
$ mkdir 编码
$ mv *.ucm 编码
$ enc2xs -M 我的编码/*ucm
2. 编辑生成的文件。 如果您没有时间且无意这样做,则不必这样做
给别人。 但编辑 pod 并添加更多测试是个好主意。
3. 现在发出所有 Perl Mongers 喜欢的命令:
$ perl 生成文件.PL
为 Encode::My 编写 Makefile
4. 现在你要做的就是制作。
使
cp My.pm blib/lib/编码/My.pm
/usr/local/bin/perl /usr/local/bin/enc2xs -Q -O \
-o 编码_t.c -f 编码_t.fnm
读取 myascii (myascii)
编写编译表
字符串表中的 128 个字节
384 字节 (75%) 节省了发现重复项
使用子字符串节省了 1 个字节 (0.775%)
....
chmod 644 blib/arch/auto/编码/My/My.bs
$
所需的时间取决于您的机器有多快以及您的机器有多大
编码是。 除非你正在做一些像 euc-tw 这样的大事,否则不会花太多时间
长。
5. 您已经可以“进行安装”,但您应该先进行测试。
$进行测试
PERL_DL_NONLAZY=1 /usr/local/bin/perl -Iblib/arch -Iblib/lib \
-e '使用 Test::Harness qw(&runtests $verbose); \
$详细=0; 运行测试@ARGV;' t/*.t
t/我的……好吧
所有测试成功。
文件=1,测试=2,0 挂钟秒
(0.09 cusr + 0.01 csys = 0.09 CPU)
6.如果你对测试结果满意,只需“make install”
7. 如果您想将您的编码添加到 Encode 的按需加载列表中(这样您就不必
“使用编码::你的编码”),运行
enc2xs-C
更新 Encode::ConfigLocal,这是一个控制本地设置的模块。 在那之后,
“使用编码;” 足以按需加载您的编码。
统一 字符 地图位置
Encode 使用 Unicode 字符映射 (UCM) 格式进行源字符映射。 这个
格式由 IBM 的 ICU 包使用,并被 Nick Ing-Simmons 用于与
编码模块。 由于 UCM 比 Tcl 的编码映射更灵活,而且用户更多
友好,这是现在推荐的编码格式。
UCM 文件如下所示。
#
# 注释
#
"US-ascii" # 必填
"ascii" # 可选
1 # 必填; 通常 1
1 # 最大# 字节/字符
\x3F # 替换字符
#
魅力地图
\x0000 |00 #
\x0001 |01 #
\x0002 |02 #
....
\x007C |7 # 垂直线
\x007D |7 # 右花括号
\x007E |7 # 波浪号
\x007F |7 #
结束符文
· “#”后面的任何内容都被视为注释。
· 标题部分一直持续到包含单词 CHARMAP 的行。 这个部分
有一种形式 折扣值,每行一对。 用作值的字符串必须是
引。 裸词被视为数字。 \xXX 代表一个字节。
大多数关键字都是不言自明的。 子字符 表示替换字符,而不是
子字符。 当您将 Unicode 序列解码为此编码但没有匹配时
字符被找到,这里定义的字节序列将被使用。 在大多数情况下,
这里的值是 \x3F; 在 ASCII 中,这是一个问号。
· CHARMAP 启动字符映射部分。 每行有如下形式:
\xXX.. |0 # 评论
^^^
| | +- 后备标志
| +-------- 编码字节序列
+-------------- Unicode 十六进制字符 ID
除了回退标志外,格式与标题部分大致相同: |
其次是 0..3。 可能值的含义如下:
|0 往返安全。 解码为 Unicode 的字符编码回相同的字节
序列。 大多数字符都有这个标志。
|1 unicode -> 编码的回退。 看到时,enc2xs 为
仅编码地图。
|2 如果没有代码点,则跳过子字符映射。
|3 编码回退 -> unicode。 看到时,enc2xs 为
仅解码地图。
· 最后,END OF CHARMAP 结束本节。
当您手动创建 UCM 文件时,您应该复制 ascii.ucm 或现有的
接近你的编码,而不是从头开始写你自己的。
这样做时,请确保您至少离开 U0000 至 U0020 照原样,除非您的环境
是EBCDIC。
警告:并非 UCM 中的所有功能都已实现。 例如,不使用 icu:state。
因此,如果你想支持算法,你需要编写一个 perl 模块
编码,特别是 ISO-2022 系列。 此类模块包括 Encode::JP::2022_JP、
编码::KR::2022_KR 和编码::TW::HZ。
应对 复制 映射
创建地图时,您应该使您的映射往返安全。 那是,
"encode('your-encoding', decode('your-encoding', $data)) eq $data" 代表所有
标记为“|0”的字符。 以下是如何确保:
· 以Unicode 顺序对您的地图进行排序。
· 当您有重复的条目时,用“|1”或“|3”标记其中之一。
· 并确保“|1”或“|3”条目跟随“|0”条目。
这是 big5-eten 的一个例子。
\xF2550\xF9 |9
\xA2550\xA2 |4
Internally Encoding -> Unicode and Unicode -> Encoding Map 看起来像这样;
E 到 UU 到 E
--------------------------------------
\xF9\xF9 => U2550 U2550 => \xF9\xF9
\xA2\xA4 => U2550
所以它对于\xF9\xF9 来说是往返安全的。 但是如果上面的线是颠倒的,这就是
发生。
E 到 UU 到 E
--------------------------------------
\xA2\xA4 => U2550 U2550 => \xF9\xF9
(\xF9\xF9 => U2550 现在被覆盖了!)
编码包附带 乌克林特,一个粗略但足够的实用程序来检查
UCM 文件的完整性。 在 Encode/bin 目录下检查这个。
如有疑问,您可以使用 排序, Encode/bin 目录下的另一个实用程序。
书签
· ICU主页http://www.icu-project.org/>
·ICU字符映射表http://site.icu-project.org/charts/charset>
· ICU:转化数据http://www.icu-project.org/userguide/conversion-data.html>
使用 onworks.net 服务在线使用 enc2xs