変換テーブル
InterSystems IRIS® データ・プラットフォームは、文字の変換タスクで変換テーブル (入出力テーブルとも呼ばれます) を使用します。一部の API 呼び出し (および $zconvert 関数) は、引数として変換テーブルを受け入れることができます。ここでは、使用可能な変換テーブルのリファレンス情報を提供します。
概要
文字の変換に変換テーブルが使用される一般的なシナリオには以下の 2 つがあります。
-
多くのコンテキスト (URL、HTML、JSON など) では、特定の文字は許可されておらず、エスケープ・シーケンスで表す必要があります。このような場合、それらの文字と許可されている文字セットとの間で変換が必要となります。
-
データベース外のソースから読み取る、またはデータベース外の宛先に書き込む場合、そのエンティティは InterSystems IRIS が使用しているものとは異なる文字セットを期待している可能性があります。この場合、文字エンコードを変換する必要があります。
特定のコンテキストの “変換テーブル” は、実際にはテーブルのペアです。1 つのテーブルは既定の文字セットを他言語文字セット (または他言語コンテキスト) に変換する方法を指定し、もう 1 つのテーブルは反対方向に変換する方法を指定します。InterSystems IRIS では、このテーブルのペアを、入力モードと出力モードを持つ 1 つの単位として参照して変換を実行します。したがって、HTML との間での変換を管理するための HTML 変換テーブルがあり、CP1250 文字セットとの間での変換を管理するための CP1250 変換テーブルがあります。
テーブルのリスト
以下は、InterSystems IRIS 変換テーブルのリストです。
8 ビット文字または 16 ビット Latin-1 文字 (高位バイトの値が 00 の Unicode 文字) の変換を行いません。
RAW 変換は、非 Latin-1 ロケール (rusw など) を使用する InterSystems IRIS システムでは使用できません。
8 ビット文字を対応する Unicode 文字に変換します。
HTML エスケープ文字を文字列に追加 (出力モード) または文字列から削除 (入力モード) します。"出力エスケープ" のテーブルを参照してください。
提供された JavaScript 変換テーブルを使用し、JavaScript 内で使用できるように文字列内の文字をエスケープ処理します。出力変換については、"出力エスケープ" のテーブルを参照してください。JS と JSML の比較は、"JS と JSML、JSON と JSONML の変換" を参照してください。入力変換については、“\0”、“\000”、“\x00”、および “\u0000” はすべて、NULL の有効なエスケープ・シーケンスです。
指定された変換テーブルを使用して JSON 形式に変換します。出力変換については、"出力エスケープ" のテーブルを参照してください。JSON と JSONML の比較は、"JS と JSML、JSON と JSONML の変換" を参照してください。入力変換については、“\0”、“\000”、“\x00”、および “\u0000” はすべて、NULL の有効なエスケープ・シーケンスです。
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 は、$CHAR(255) (Unicode 文字) より大きな文字を UTF-8 にエンコードしてから、UTF-8 値を 16 進数に % エンコードします。
"URL および URI の変換" も参照してください。
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 16 進数で表されます ($CHAR(256) = %u0100)。
"URL および URI の変換" も参照してください。
UTF-8 エンコード16 ビットの Unicode 文字を一連の 8 ビット文字に変換 (出力モード) します。ASCII 16 ビットの Unicode 文字は、単一の 8 ビット文字に変換されます。例えば、16 進数 0041 (文字 “A”) は、8 ビット文字の 16 進数 41 に変換されます。非 ASCII の Unicode 文字は、2 つまたは 3 つの 8 ビット文字に変換されます。
0080 から 07FF の Unicode 16 進数は、2 つの 8 ビット文字に変換されます。これには、ラテン 1 補助とラテン拡張文字、およびギリシャ語、キリル文字、ヘブライ語、アラビア文字が含まれます。
0800 から FFFF の Unicode 16 進数は、3 つの 8 ビット文字に変換されます。これらは Unicode 基本多言語面の残りの部分を構成します。したがって、$CHAR(0) から $CHAR(127) の ASCII 文字は、RAW モードと UTF8 モードでは同じになり、$CHAR(128) 以上の文字は変換されます。
入力モードではこの変換が逆になります。詳細は "Unicode" を参照してください。
XML エスケープ文字を文字列に追加 (出力モード) または文字列から削除 (入力モード) します。"出力エスケープ" のテーブルを参照してください。
残りの変換テーブルは文字セット変換に固有であり、これらのテーブルにはこれらの文字セットと同じ名前が付けられます。テーブルには以下のようなものがあります。
-
UnicodeLittle
-
UnicodeBig
-
CP1250
-
CP1251
-
CP1252
-
CP1253
-
CP1255
-
CP437
-
CP850
-
CP852
-
CP866
-
CP874
-
EBCDIC
-
Latin2
-
Latin9
-
LatinC
-
LatinG
-
LatinH
-
LatinT
現在の変換テーブルをリストする方法については、"関連する API" を参照してください。
出力エスケープ
ここでは、特定の変換テーブルが出力モードで文字を変換する方法を示します。
HTML | JS | JSON | URI | URL | XML | |
---|---|---|---|---|---|---|
NULL $CHAR(0) | \x00 | \u0000 | %00 | %00 | ||
$CHAR(1) ~ $CHAR(7) | \x01 ~ \x07 | \u0001 ~ \u0007 | %01 ~ %07 | %01 ~ %07 | ||
バックスペース $CHAR(8) | \b | \b | %08 | %08 | ||
水平タブ $CHAR(9) | \t | \t | %09 | %09 | ||
改行 $CHAR(10) | \n | \n | %0A | %0A | ||
垂直タブ $CHAR(11) | \v | \u000B | %0B | %0B | ||
書式送り $CHAR(12) | \f | \f | %0C | %0C | ||
キャリッジ・リターン $CHAR(13) | \r | \r | %0D | %0D | ||
$CHAR(14) ~ $CHAR(31) | \u000E ~ \u001F | %0E ~ %1F | %0E ~ %1F | |||
$CHAR(32) | %20 | %20 | ||||
" (二重) | " | \" | \” | %22 | %22 | " |
# | %23 | %23 | ||||
$ | %24 | |||||
% | %25 | %25 | ||||
& | & | %26 | %26 | & | ||
‘ (アポストロフィ) $CHAR(39) | ' | \' | %27 | ' | ||
( | %28 | |||||
)。 | %29 | |||||
* | %2A | |||||
+ | %2B | %2B | ||||
, | %2C | %2C | ||||
/ (スラッシュ) $CHAR(47) | \/ | %2F | ||||
: | %3A | %3A | ||||
; | %3B | %3B | ||||
< | < | %3C | %3C | < | ||
= | %3D | %3D | ||||
> | > | %3E | %3E | > | ||
? | %3F | %3F | ||||
@ | %40 | %40 | ||||
[ | %5B | %5B | ||||
\ | \\ | \\ | %5C | %5C | ||
] | %5D | %5D | ||||
^ | %5E | %5E | ||||
` | %60 | %60 | ||||
{ | %7B | %7B | ||||
| | %7C | %7C | ||||
} | %7D | %7D | ||||
~ | %7E | |||||
$CHAR(127) | %7F | %7F | ||||
$CHAR(128) ~ $CHAR(159) | %C2%80 ~ %C2%9F | %80 ~ %9F | ||||
$CHAR(160) | | %C2%A0 | %A0 | |||
$CHAR(161) ~ $CHAR(191) | %C2%A1 ~ %C2%BF | %A1 ~ %BF | ||||
$CHAR(192) ~ $CHAR(191) | %C3%80 ~ %C3%BF | %C0 ~ %FF |
URL および URI の変換
URL または URI で使用できるのは、特定の 8 ビットの ASCII 文字のみです。その他のすべての文字は % で始まるエスケープ・シーケンスで表す必要があります。Unicode 文字を含む文字列を URL または URI に変換する場合、UTF-8 エンコードを使用して最初にローカル表現を 8 ビットの中間表現に変換します。その後、UTF-8 の結果を URL エンコードに変換します。URL を元の Unicode 文字列に戻すには、逆の処理を実行します。これを以下の例で示します。
SET ustring="US$ to "_$CHAR(8364)_" échange"
WRITE "initial string is: ",ustring,!
ConvertUnicodeToURL
SET utfo = $ZCONVERT(ustring,"O","UTF8")
SET urlo = $ZCONVERT(utfo,"O","URL")
WRITE "Unicode to URL conversion: ",urlo,!
ConvertURLtoUnicode
SET urli = $ZCONVERT(urlo,"I","URL")
SET utfi = $ZCONVERT(urli,"I","UTF8")
WRITE "URL to Unicode conversion: ",utfi
JS と JSML、JSON と JSONML の変換
JS と JSON の変換では、Unicode 文字に UTF-8 エンコードを使用します。JSML と JSONML の変換では、Unicode 文字をエンコードなしで変換します。ASCII 文字 ($CHAR(0) ~ $CHAR(127)) では、JS と JSML のエンコードは同一です。ASCII 文字 ($CHAR(0) ~ $CHAR(127)) では、JSON と JSONML のエンコードは同一です。
以下の例では、JS の文字と JSML の文字の変換を比較します。
FOR i=1:1:256 {
SET x=$ZCVT($C(i),"O","JS")
SET y=$ZCVT($C(i),"O","JSML")
IF x=y {
WRITE "."
} ELSE {
WRITE !!,$ZHEX(i),!,"JS: " ZZDUMP x WRITE !,"JSML: " ZZDUMP y
}
}
関連する API
現在使用可能な変換テーブルのリストは、以下の例に示す、%SYS.NLS.LocaleOpens in a new tab の XLTTablesOpens in a new tab プロパティを参照してください。
SET nlsoref=##class(%SYS.NLS.Locale).%New()
WRITE $LISTTOSTRING(nlsoref.XLTTables,", ")
%Net.CharsetOpens in a new tab を使用して、InterSystems IRIS 内で文字セットを表すこともできます。このクラスは、以下のクラス・メソッドを含んでいます。
-
GetDefaultCharset() は、現在の InterSystems IRIS ロケールの既定の文字セットを返します (次の見出しを参照)。
-
GetTranslateTable() は、指定された入力文字セットの InterSystems IRIS 変換テーブルの名前を返します。
-
TranslateTableExists() は、指定された文字セットの変換テーブルがロードされているかどうかを示します。
メソッド・シグニチャについては、%Net.CharsetOpens in a new tab のクラス・ドキュメントを参照してください。