第十六章 ObjectScript 翻译

106 阅读1分钟

第十六章 ObjectScript 翻译表

IRIS 使用转换表(也称为 I/O 表)来完成字符转换任务。某些 API 调用(以及 $zconvert 函数)可以接受转换表作为参数。

介绍

使用翻译表进行字符转换的一般场景有两种:

  • 在许多上下文中(例如在 URLHTMLJSON 等中),不允许使用特定字符,并且必须使用转义序列来表示。在这种情况下,需要将字符与允许的字符集进行转换。
  • 如果正在从数据库外部的源读取或写入数据库外部的目标,则该实体可能需要与 IRIS 使用的字符集不同的字符集。这种情况下就需要对字符编码进行转换。

给定上下文的“翻译表”实际上是一对表。一个表指定如何从默认字符集转换为外来字符集(或外来上下文),另一个表指定如何沿另一个方向转换。在 IRIS 中,惯例是将这对表称为具有输入模式和输出模式的单个单元。因此,有一个 HTML 转换表用于管理与 HTML 的转换,并且有一个 CP1250 转换表用于管理与 CP1250 字符集的转换。

表格列表

以下是 IRIS 转换表的列表:

RAW

8 位字符或 16Latin-1 字符(高位字节值为 00Unicode 字符)不执行转换。

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 编码。这会将(输出模式)16Unicode 字符转换为一系列 8 位字符。 ASCII 16Unicode 字符转换为单个 8 位字符;例如,十六进制 0041(字母“A”)会转换为 8 位字符十六进制 41。非 ASCII Unicode 字符会转换为两个或三个 8 位字符。

Unicode 十六进制 008007FF 转换为两个 8 位字符;其中包括 Latin-1 补充字符和拉丁扩展字符以及希腊语、西里尔语、希伯来语和阿拉伯字母。

Unicode 十六进制 0800FFFF 转换为三个 8 位字符;这些构成了 Unicode 基本多语言平面的其余部分。因此,ASCII 字符 $CHAR(0)$CHAR(127)RAWUTF8 模式下是相同的; $CHAR(128) 及以上字符将被转换。

XML

向字符串添加(输出模式)或删除(输入模式)XML 转义字符。

其他表

其余的转换表特定于字符集转换,这些表的名称与这些字符集的名称相同。这些表包括以下内容:

  • UnicodeLittle
  • UnicodeBig
  • CP1250
  • CP1251
  • CP1252
  • CP1253
  • CP1255
  • CP437
  • CP850
  • CP852
  • CP866
  • CP874
  • EBCDIC
  • Latin2
  • Latin9
  • LatinC
  • LatinG
  • LatinH
  • LatinT