第十六章 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
转义字符。
其他表
其余的转换表特定于字符集转换,这些表的名称与这些字符集的名称相同。这些表包括以下内容:
UnicodeLittle
UnicodeBig
CP1250
CP1251
CP1252
CP1253
CP1255
CP437
CP850
CP852
CP866
CP874
EBCDIC
Latin2
Latin9
LatinC
LatinG
LatinH
LatinT