第十六章 ObjectScript 翻译表
IRIS 使用转换表(也称为 I/O 表)来完成字符转换任务。某些 API 调用(以及 $zconvert 函数)可以接受转换表作为参数。
介绍
使用翻译表进行字符转换的一般场景有两种:
- 在许多上下文中(例如在
URL、HTML、JSON等中),不允许使用特定字符,并且必须使用转义序列来表示。在这种情况下,需要将字符与允许的字符集进行转换。 - 如果正在从数据库外部的源读取或写入数据库外部的目标,则该实体可能需要与
IRIS使用的字符集不同的字符集。这种情况下就需要对字符编码进行转换。
给定上下文的“翻译表”实际上是一对表。一个表指定如何从默认字符集转换为外来字符集(或外来上下文),另一个表指定如何沿另一个方向转换。在 IRIS 中,惯例是将这对表称为具有输入模式和输出模式的单个单元。因此,有一个 HTML 转换表用于管理与 HTML 的转换,并且有一个 CP1250 转换表用于管理与 CP1250 字符集的转换。
表格列表
以下是 IRIS 转换表的列表:
RAW
对 8 位字符或 16 位 Latin-1 字符(高位字节值为 00 的 Unicode 字符)不执行转换。
RAW 翻译不应用于使用非 Latin-1 语言环境的 IRIS 系统,例如 rusw。
SAME
将 8 位字符转换为相应的 Unicode 字符。
HTML
向字符串添加(输出模式)或删除(输入模式)HTML 转义字符。
JS or JSML
使用提供的 JavaScript 转换表转义字符串中的字符以在 JavaScript 中使用。对于输入翻译,“\0”、“\000”、“\x00”和“\u0000”都是 NULL 的有效转义序列。
JSON or JSONML
使用提供的转换表转换为 JSON 格式。
URI
在字符串中添加(输出模式)或删除(输入模式)URI 参数转义字符。 URI 对字符进行编码 !"#$%&'()*+,/:;<=>?@[]^``{|} 如下:%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2F%3A%3B%3C%3D%3E%3F%40%5B%5D%5E%60%7B%7C%7D.
空格字符被编码为 %20。
双引号字符(当包含在带引号的字符串中时必须加倍转义,例如"My ""perfect"" code") 被编码为 %22。
URI 不对波形符 (~) 字符进行编码。
URI 将高于 $CHAR(255)(Unicode 字符)的字符编码为 UTF-8,然后 % 以十六进制表示法对 UTF-8 值进行编码。
URL
在字符串中添加(输出模式)或删除(输入模式)URL 参数转义字符。 URL 对字符进行编码 "#%&+,:;<=>?@[]^{|}~ `
如下:`%20%22%23%25%26%2B%2C%3A%3B%3C%3D%3E%3F%40%5B%5D%5E%60%7B%7C%7D%7E`
空格字符被编码为 %20。
双引号字符(当包含在带引号的字符串中时必须加倍转义,例如"My ""perfect"" code") 被编码为 %22。
高于 $CHAR(255) 的字符以 Unicode 十六进制表示法表示:$CHAR(256) = %u0100。
UTF8
UTF-8 编码。这会将(输出模式)16 位 Unicode 字符转换为一系列 8 位字符。 ASCII 16 位 Unicode 字符转换为单个 8 位字符;例如,十六进制 0041(字母“A”)会转换为 8 位字符十六进制 41。非 ASCII Unicode 字符会转换为两个或三个 8 位字符。
Unicode 十六进制 0080 到 07FF 转换为两个 8 位字符;其中包括 Latin-1 补充字符和拉丁扩展字符以及希腊语、西里尔语、希伯来语和阿拉伯字母。
Unicode 十六进制 0800 到 FFFF 转换为三个 8 位字符;这些构成了 Unicode 基本多语言平面的其余部分。因此,ASCII 字符 $CHAR(0) 到 $CHAR(127) 在 RAW 和 UTF8 模式下是相同的; $CHAR(128) 及以上字符将被转换。
XML
向字符串添加(输出模式)或删除(输入模式)XML 转义字符。
其他表
其余的转换表特定于字符集转换,这些表的名称与这些字符集的名称相同。这些表包括以下内容:
UnicodeLittleUnicodeBigCP1250CP1251CP1252CP1253CP1255CP437CP850CP852CP866CP874EBCDICLatin2Latin9LatinCLatinGLatinHLatinT