将分析脚本转换到 Unicode

如果您要从 Analytics 的非 Unicode 版迁移至 Unicode 版,则现有常规脚本和分析脚本会被自动转换到 Unicode。但是,您必须验证脚本的逻辑在被应用于双字节 Unicode 数据时保持不变。

什么是 Unicode?

Unicode 是一种使用两个或更多个字节表示每个字符且所有语言的字符均包含于单个字符集内的文本编码标准。Diligent 产品的 Unicode 版允许您用所有现代语言查看和处理包含 Unicode 编码数据的文件和数据库。

说明

Analytics机器人代理支持小端字节序 (LE) 编码 Unicode 数据。这些产品不可用于分析大端字节序 (BE) 编码数据。

必需的分析脚本更改

更新任何以字节为单位指定值的参数

非 Unicode 版 Analytics 中的字符的长度为一个字节。Unicode 版中的字符(如果它们是 Unicode 数据)的长度为两个字节。当您在非 Unicode 版 Analytics 中以字节为单位指定域长度或起始位置时,字节数等于字符数。对于 Unicode 版 Analytics 中的 Unicode 数据,则并非如此。

要转换分析脚本以供在 Unicode Analytics 中使用,您必须调整任何以字节为单位指定字段长度或起始位置的参数的数值类型值。例如,对于在非 Unicode 版 Analytics 中指定 WID 值 7 的 IMPORT DELIMITED 命令,您必须将 WID 值翻倍为 14 才能在 Unicode Analytics 中生成相同的结果。

此外,对于 Unicode 数据,请为域指定奇数起始字节位置,为域长度指定偶数字节。指定偶数起始位置或奇数长度可能导致字符显示不正确。

重新创建 IMPORT PRINT 和 IMPORT DELIMITED 的所有实例

您需要重新创建 IMPORT PRINTIMPORT DELIMITED 命令的所有实例:

  1. 使用 Unicode 版 Analytics 中的数据定义向导,导入源数据文件。

    使用数据定义向导可确保所有语法都是有效的。

  2. 使用日志中的导入语法更新脚本。

  3. 对于分析脚本,请将该脚本重新提交到机器人

更改 ZONED( ) 和 EBCDIC( ) 函数的所有实例

您需要按如下方式更改 ZONED()EBCDIC() 函数的所有实例,以便将这些函数返回的 ASCII 值正确转换为 Unicode 数据:

  • 计算域ZONED()EBCDIC() 实例嵌套在 BINTOSTR() 函数中
  • 静态表达式ZONED() 实例嵌套在 BINTOSTR() 函数中
BINTOSTR(ZONED(%result%, 5), 'A')

更改 OPEN FORMAT 命令的所有实例

需要修改 OPEN FORMAT 命令的所有实例。您需要使用 SKIP 参数跳过要打开的 Unicode 文件的前两个字节。这样做的原因是 UTF-16 编码文件的前两个字节被保留为字节顺序标记且独立于文件中的文本。

非 Unicode

OPEN "ascii_test.txt" FORMAT template_table CRLF
DEFINE FIELD full_rec ASCII 1 10

Unicode

OPEN "utf-16_test.txt" FORMAT template_table CRLF SKIP 2
DEFINE FIELD full_rec UNICODE 1 20

验证已转换的分析脚本

验证 Unicode 版本的分析脚本生成的结果与非 Unicode 版本的分析脚本生成的结果完全相同。达到这一目的的最佳方式是使用 Diff 工具比较分析中生成的日志文件。Diff 工具可识别文件之间的任何差异。

如果结果不同,应该怎么办?

如果使用分析脚本的 Unicode 版本无法生成与非 Unicode 版本相同的结果,则您或许能够通过在分析的每个步骤比较脚本的日志输出来隔离问题。