CSP での 文 字 セットの 使 用 法 Version 5.1 2006-03-14 InterSystems Corporation 1 Memorial Drive Cambridge MA 02142 www.intersystems.com
CSP での 文 字 セットの 使 用 法 Caché Version 5.1 2006-03-14 Copyright 2006 InterSystems Corporation. All rights reserved. このドキュメントは Sun Microsystems RenderX Inc. アドビ システムズ および ワールドワイド ウェブ コンソーシアム (www.w3c.org)のツールと 情 報 を 使 用 して Adobe Portable Document Format (PDF)で 作 成 およびフォーマットされました 主 要 ドキュメント 開 発 ツールは InterSystemsが 構 築 したCaché と Javaを 使 用 した 特 別 目 的 のXML 処 理 アプリケーションで す Caché 製 品 とロゴは InterSystems Corporation の 登 録 商 標 です Ensemble 製 品 とロゴは InterSystems Corporation の 登 録 商 標 です InterSystems という 名 前 とロゴは InterSystems Corporation の 登 録 商 標 です このドキュメントは インターシステムズ 社 ( 住 所 :One Memorial Drive, Cambridge, MA 02142)あるいはその 子 会 社 が 所 有 す る 企 業 秘 密 および 秘 密 情 報 を 含 んでおり インターシステムズ 社 の 製 品 を 稼 動 および 維 持 するためにのみ 提 供 される こ の 発 行 物 のいかなる 部 分 も 他 の 目 的 のために 使 用 してはならない また インターシステムズ 社 の 書 面 による 事 前 の 同 意 がない 限 り 本 発 行 物 を いかなる 形 式 いかなる 手 段 で その 全 てまたは 一 部 を 再 発 行 複 製 開 示 送 付 検 索 可 能 なシステムへの 保 存 あるいは 人 またはコンピュータ 言 語 への 翻 訳 はしてはならない かかるプログラムと 関 連 ドキュメントについて 書 かれているインターシステムズ 社 の 標 準 ライセンス 契 約 に 記 載 されている 範 囲 を 除 き ここに 記 載 された 本 ドキュメントとソフトウェアプルグラムの 複 製 使 用 廃 棄 は 禁 じられている インターシス テムズ 社 は ソフトウェアライセンス 契 約 に 記 載 されている 事 項 以 外 にかかるソフトウェアプログラムに 関 する 説 明 と 保 証 を するものではない さらに かかるソフトウェアに 関 する あるいはかかるソフトウェアの 使 用 から 起 こるいかなる 損 失 損 害 に 対 するインターシステムズ 社 の 責 任 は ソフトウェアライセンス 契 約 にある 事 項 に 制 限 される 前 述 は そのコンピュータソフトウェアの 使 用 およびそれによって 起 こるインターシステムズ 社 の 責 任 の 範 囲 制 限 に 関 する 一 般 的 な 概 略 である 完 全 な 参 照 情 報 は インターシステムズ 社 の 標 準 ライセンス 契 約 に 記 され そのコピーは 要 望 によっ て 入 手 することができる インターシステムズ 社 は 本 ドキュメントにある 誤 りに 対 する 責 任 を 放 棄 する また インターシステムズ 社 は 独 自 の 裁 量 にて 事 前 通 知 なしに 本 ドキュメントに 記 載 された 製 品 および 実 行 に 対 する 代 替 と 変 更 を 行 う 権 利 を 有 する Caché および InterSystems Caché Caché SQL Caché ObjectScript および Caché Object は インターシステムズ 社 の 商 標 です ここで 使 われている 他 の 全 てのブランドまたは 製 品 名 は 各 社 および 各 組 織 の 商 標 または 登 録 商 標 です インターシステムズ 社 の 製 品 に 関 するサポートやご 質 問 は 以 下 にお 問 い 合 わせください: InterSystems ワールドワイド カスタマサポート Tel: +1 617 621-0700 Fax: +1 617 374-9391 Email: support@intersystems.com
目 次 CSP での 文 字 セットの 使 用 法... 1 CSP での 文 字 セットの 使 用 法 iii
CSP での 文 字 セットの 使 用 法 文 字 セットについて および 文 字 セットが CSP によって 処 理 される 方 法 については 以 前 にも 説 明 しました そこで 今 回 は CSP 文 字 セット 選 択 肢 の 背 景 にあるロジックと オプション およびそれが どのように 作 動 するかについて 説 明 します ユーザの 皆 さんにとって 有 用 な 情 報 となります Caché で 提 供 されている 各 CSP ページには ページのコンテンツをブラウザに 伝 える 一 連 の HTTP ヘッダが 含 まれます これらのヘッダの 定 義 は RFC 1945 ( 現 在 CSP でサポートされている HTTP/1.0 仕 様 ) に 含 まれています これらのヘッダはブラウザでは 表 示 されず ヘッダを 表 示 できるブラウザ はほとんどありません ヘッダが 何 であるかを 知 るには Caché に 組 み 込 まれている %Net.HttpRequest オブジェクトを 使 用 すると 便 利 です 例 えば 一 般 的 な CSP ページからヘッダを 検 索 するには 以 下 を 実 行 します Set http = ##class(%net.httprequest).%new() Set http.server = "127.0.0.1" Set http.port = 1972 Do http.head("/csp/samples/loop.csp") Do http.httpresponse.outputtodevice() Do http.%close() これにより (Unicode Caché システムで) 以 下 が 出 力 されます HTTP/1.0 200 OK CACHE-CONTROL: no-cache CONNECTION: Close CONTENT-TYPE: text/html; charset=utf-8 DATE: Mon, 13 Aug 2001 17:34:18 GMT EXPIRES: Thu, 29 Oct 1998 17:04:19 GMT PRAGMA: no-cache SET-COOKIE: CSPSESSIONID=260066677206262462181; path=/; Caché に 組 み 込 まれているミニ Web サーバを 使 用 するため ポートは 1972 に 設 定 されています が 適 切 な Web サーバのセットアップをお 持 ちの 場 合 は 既 定 でポート 番 号 80 を 使 用 することも できます CSP が 生 成 するヘッダを 表 示 するには 以 下 を 使 用 して Caché から 生 成 する 方 法 もあ ります Do ShowPage^%apiCSP("/csp/samples/loop.csp",,,1) 'Content-Type' ヘッダは 常 に 送 信 され これにはブラウザで 予 期 されている ドキュメントのタイプ を 指 定 します 通 常 これは text/html になります HTML ドキュメントであり 対 応 するレンダリ ングが 必 要 なことを 意 味 します JPEG イメージの 場 合 は image/jpeg になります コンテンツ タ イプが text の 場 合 文 字 セットを 指 定 して charset 修 飾 子 と 同 じ 行 で 使 用 することもできま す Content-Type: text/html; charset=utf-8 CSP での 文 字 セットの 使 用 法 1
これは 後 に 続 く Web ページが Unicode 標 準 のマッピングである utf-8 でコード 化 されていること を 意 味 しています ASCII コード 0-127 は 値 0-127 として utf-8 にマップされます ブラウザは HTTP ヘッダで 指 定 された 文 字 テーブルの 各 文 字 を 検 索 し この 文 字 に 対 応 するシンボルをウィン ドウに 表 示 します CSP では 適 切 な charset ヘッダを CSP ページと 送 信 し ブラウザがそれを 適 切 に 表 示 できるよう にすることが 重 要 です charset に 値 を 指 定 しなければ (この 方 法 は 後 述 します) CSP は Unicode Caché システムで 既 定 値 を 使 用 します これは 8 ビットの Caché システム 上 の utf-8 です これは システムの 既 定 のロケールで CNLS.EXE ユーティリティ ( 実 行 ファイルとともに CacheSys/Bin ディレクトリにインストールされています) を 使 用 して 設 定 でき このユーティリティを 実 行 する 時 に ロケール タブの 最 上 部 に 表 示 されます 以 下 を 呼 び 出 すことでも 見 つけること ができます Write ^%SYS("LOCALE","CURRENT") 上 記 をコマンド 行 で 入 力 します ドロップダウン ダイアログの 隣 の 名 前 を HTTP ヘッダで 使 用 され ている 外 部 名 に 変 換 するには 以 下 の 関 数 を 使 用 します Write $$MapExtCharset^%NLS(^%nls("Loc",locale,0)) locale は CNLS.EXE ユーティリティの 小 文 字 の 値 です ページの charset を 既 定 ではなく 明 示 的 に 設 定 したい 場 合 以 下 のようないくつかの 方 法 があり ます OnPreHTTP メソッドで %response オブジェクトの CharSet プロパティを 設 定 します Set %response.charset="iso-8859-1" これは コンテンツ タイプが text タイプの 場 合 ( 他 のコンテンツ タイプではできません) この 値 とともに charset ヘッダを 出 力 します このメソッドは 通 常 は 入 力 が 変 換 されないのでお 勧 めし ません 他 のメカニズムのうちのどれかを 使 用 することをお 勧 めします CSP ページでは <csp:content charset="iso-8859-1"> タグを 使 用 します これは CSP システム ルールに 適 合 し この CSP ペー ジからコンパイルされたクラスの CHARSET パラメータを 設 定 します ページが 読 み 込 まれると き %response.charset 値 はこのページの CHARSET パラメータに 初 期 化 されます したがって コ ンテンツ タイプが 'text' タイプの 場 合 これは charset に 対 して 書 き 出 される 値 です CSP ページ の <head></head> セクションにある <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> タグを 使 用 します これはシステム 規 約 から 見 つけられ コンパイルされたク ラスの CHARSET パラメータに 変 換 されます したがって 最 終 結 果 はオプション 1 とまったく 同 じ ものです %CSP.Page から 派 生 するクラスを 作 成 し このクラスでパラメータ CHARSET に 使 用 したい charset を 指 定 します [システム 管 理 ポータル] の [CSPアプリケーション 編 集 ] ([[ホーム] [セキュリティ 管 理 ] [CSPアプリケーション] [CSPアプリケーション 編 集 ]]) で 作 成 した 新 しいクラスがこのアプリ ケーションのスーパークラスになるように [デフォルトスーパークラス] フィールドを 設 定 します 次 に CSP アプリケーションのすべてのページをリコンパイルし このスーパークラスを 継 承 するように します 結 果 として 既 定 の CHARSET パラメータを 自 動 的 に 取 得 するようになります これは 同 時 に 大 量 のページの charset を 設 定 するときに 非 常 に 便 利 です 2 CSP での 文 字 セットの 使 用 法
HTTP ヘッダで charset エントリを 入 力 する 方 法 以 外 に これを 設 定 することで ブラウザに 書 き 出 されるすべての 文 字 を Caché が 変 換 する 方 法 およびブラウザから 受 け 取 った 入 力 を HTTP ポ スト または URL のパラメータとして 変 換 する 方 法 に 影 響 します CSP は 常 に utf-8 を 使 用 して HTTP ヘッダを 出 力 します ブラウザが 'charset' ヘッダを 読 む 前 には charset が 何 かを 知 ること はできないからです また RFC は 文 字 が HTTP ヘッダで ASCII 以 外 の 文 字 を 許 可 するなら ASCII 文 字 はこのエンコードを 使 用 してすべて 保 持 されるので 論 理 的 な 唯 一 の 選 択 肢 は utf-8 に なります ヘッダが 一 度 出 力 されると CSP は 以 下 の 呼 び 出 しを 使 用 して ページの 残 りの 出 力 を ヘッダで 指 定 された charset に 切 り 替 えます Write $$SetIO^%NLS(tablename) この 関 数 は 使 用 されていた 古 いテーブルを 返 し 新 規 のテーブルを 使 用 するために 現 在 のデバ イスを 変 更 します このテーブル 名 は テーブルの Caché 内 部 名 です 例 えば 変 換 を 停 止 する 場 合 は RAW で utf-8 を 使 用 する 場 合 は UTF8 です 現 在 のテーブルの 名 前 を 検 索 する 場 合 は 以 下 を 使 用 します Write $$GetIO^%NLS() これは Caché の Unicode バージョンで 既 定 の charset を 使 用 する 場 合 すべての 文 字 出 力 が utf-8 で 表 されるように 強 制 します 8 ビットの Caché で 既 定 値 (Caché で 指 定 されているロケール) を 使 用 している 場 合 文 字 はまったく 変 換 されず RAW テーブルが 使 用 されます これは Caché データベースの 文 字 がすでに 既 定 のロケールにあるからです (なぜなら 既 定 のロケールは Caché データベースのロケール 自 体 を 表 すためです) したがって 既 定 のテーブルから 既 定 のテーブルに 変 換 されるだけなので 変 換 は 必 要 ありません 使 用 する charset を 指 定 する 場 合 Caché データベース 内 部 に 保 存 されている 文 字 が 指 定 され た charset に 変 換 されるように Caché は NLS テーブルを 取 得 します charset 名 から 内 部 Caché テーブル の 名 前 を 検 索 するには 以 下 の 関 数 を 使 用 します Write $$MapCharset^%NLS(charset) CSP からページを 表 示 するときに Character Set TEST not installed エラー メッセージが 発 生 した 場 合 これは Caché で 利 用 できる charset を 要 求 しているという 意 味 です 例 えば 以 下 を 呼 び 出 す 場 合 Write $$MapCharset^%NLS("TEST") これは "" が 返 されます TEST という charset が 存 在 しないからです このエラーが 発 生 した 場 合 対 処 法 は 2 つあります 1 つは CNLS.EXE ユーティリティを 使 用 して Caché にテーブルをロー ドする (またはこのテーブルが 提 供 されていない 場 合 は この 名 前 を 持 つテーブルを 作 成 する) 方 法 もう 1 つはサポートされている 他 の charset を 使 用 する CSP ページに 変 更 する 方 法 です 指 定 されたテーブルを 使 用 して 変 換 できない 文 字 は? として 出 力 されるか エラー 文 字 は CNLS.EXE ユーティリティで 指 定 されます したがって Web ページや Caché から 返 されたデータ に? という 文 字 が 表 示 されている 場 合 適 切 に 変 換 できない 文 字 が 含 まれているということにな ります CSP での 文 字 セットの 使 用 法 3
URL または HTTP ポストで Web ブラウザからデータが 返 されるとき CSP は 文 字 を 外 部 charset から Caché の 既 定 のロケールに 変 換 します Web ブラウザから 送 信 された HTTP ヘッダは ブラウ ザが 使 用 している charset を 指 定 しないので (HTTP/1.0 および 1.1 仕 様 の 重 大 な 欠 点 ) ユーザ は 使 用 される charset を 推 定 する 必 要 があります ブラウザから 送 信 された charset が 情 報 を 送 信 しているページで 指 定 された charset と 同 じであると 想 定 します ユーザが 'iso-8859-1' の charset を 使 用 する form.csp ページを 持 ち iso-8859-1 の charset を 使 用 する result.csp ページに 情 報 を 送 信 するフォームがある 場 合 result.csp の charset からブラウザによって 送 信 される 情 報 を 変 換 します つまり iso-8859-1 は Caché の 既 定 のロケールに 変 換 されます 一 般 的 なブラウザ のテストによると ユーザが 特 定 の charset を 持 つページを 提 供 する 場 合 ブラウザによってこのペー ジから 送 信 されるすべての 情 報 は 同 じ charset を 使 用 してコード 化 されます これはユーザが 情 報 を Caché に 送 信 しようとするページと この 情 報 を 受 け 取 るページの 両 方 が 同 じ charset を 使 用 していることを 明 確 にする 必 要 があることを 意 味 しますが アプリケーション 全 体 は 同 じ charset を 使 用 する 傾 向 があるので 難 しい 要 求 ではありません CSP は $ZConvert 関 数 を 使 用 して 文 字 列 を 外 部 charset から 内 部 charset に 変 換 します Write $ZConvert(string,"I",table) string は 変 換 する 文 字 列 で table は Caché 内 部 テーブル 名 です このドキュメントで 説 明 する 最 後 のトピックは csp ファイルで filesystem から CSP がどのように 読 み 取 るかと これが charset の 問 題 をどのように 処 理 するかです コンパイラは csp ファイルを %FileCharacterStream オブジェクトを 使 用 して 読 み 取 ります 最 初 に そのファイルが Unicode ファ イルであることをチェックし Unicode ファイルである 場 合 は ビッグ エンディアンか リトル エンディ アンかをチェックします このファイルが $char(255,254) もしくは $char(254,255) で Unicode であ る 場 合 は ファイルの 最 初 の 2 バイトを 読 むことでチェックできます ファイルが Unicode ではない 場 合 は (シーケンシャル デバイスに 対 する 変 換 タイプの Locale タブで) Caché からのファイル の 読 み 込 み 書 き 込 みのための CNLS.EXE で 既 定 の 変 換 設 定 を 使 用 します 例 えば Unicode の Caché システムを 持 ち これを charset が Shift-JIS である 日 本 で 使 用 すると 想 定 します CSP コンパイラが csp ファイルをロードするとき Shift-JIS から Unicode への 変 換 のため に 設 定 される 既 定 のシーケンシャル デバイスの 変 換 を 使 用 します したがって Caché でコンパイ ルされる CSP クラスは Unicode で 内 部 的 に 保 存 されます 上 記 のメカニズムの 1 つを 使 用 するこ とで Shift-JIS の charset を 持 つこのページを 出 力 することを CSP に 伝 えるので このページに 対 する 要 求 が 発 生 したとき CSP は TCP/IP デバイスを 設 定 して Unicode 内 部 表 現 を Shift-JIS に 外 部 的 に 変 換 します また これは HTTP ヘッダ 'charset=shift-jis' の 追 加 も 行 うので ブラウザ はページを 適 切 に 表 示 します このページに Shift-JIS 文 字 が 入 力 され 送 信 されるフォームを 含 む 場 合 ブラウザによって 送 られたデータは Shift-JIS の charset を 使 用 します 送 信 されるページ も Shift-JIS の charset を 持 つので CSP は Shift-JIS からこの 文 字 の 内 部 Unicode 表 示 に 戻 され ます csp ファイルで charset の 設 定 を 行 う <meta http-equiv> メソッドには 論 理 的 にわずかな 矛 盾 があることに 注 意 してください Web サーバで <meta http-equiv> タグを 含 む html ファイルを 作 成 する 場 合 このページがブラウザから 出 力 されるとき ブラウザはこの <meta http-equiv> タグで 指 定 された charset からデータを 変 換 して 'Content-Type' HTTP ヘッダが 'charset' を 含 むかの ようにページに 表 示 します したがって これはブラウザに html ファイルの charset を 伝 えます し かし ユーザが <meta http-equiv> タグを csp ファイルに 入 力 し これがシーケンシャル ファイルに 対 する 既 定 のデバイス 変 換 を 使 用 して Caché にロードされる 場 合 これがブラウザに 出 力 されると 4 CSP での 文 字 セットの 使 用 法
き Caché の 既 定 のロケールから <meta http-equiv> タグで 指 定 された charset に 変 換 されます し たがって <meta http-equiv> を 含 むページを 保 存 し 'utf-8' の charset を 指 定 する HTML 編 集 ツールは 全 ページを utf-8 として 保 存 します Caché がこのページをロードするとき utf-8 から Caché の 既 定 の 内 部 ロケールに 変 換 するはずです しかし デバイス 変 換 がページの charset と 適 合 しない 場 合 には 問 題 が 発 生 するものの 代 わりに 既 定 のデバイス 変 換 を 使 用 するだけです <meta http-equiv> で 指 定 された charset は 既 定 のデバイス 変 換 と 同 じである 場 合 がよくあります ( 例 : 日 本 でのシステムは 両 方 とも Shift-JIS) このため 正 しく 機 能 します ブラウザへの 出 力 およびブラウザからの 入 力 でページの 変 換 を 避 けたい 場 合 NOCHARSETCONVERT というコンパイルされたクラスのパラメータも 提 供 しています これが 1 に 設 定 されている 場 合 CSP は HTTP Content-Type ヘッダの charset を 出 力 しますが Caché の 既 定 のロケールからこの charset に 変 換 するためのデバイス 変 換 の 設 定 は 行 いません また こ のブラウザによって 送 信 された 値 を この charset から Caché の 既 定 のロケールに 変 換 することもあ りません これは すべての charset 変 換 問 題 が CSP エンジンそのものではなく 使 用 しているア プリケーションによって 処 理 される 必 要 があるということを 意 味 しています また <csp:content nocharsetconvert="1"> タグを 持 つ csp ページで NOCHARSETCONVERT を 設 定 することもでき ます NOCHARSETCONVERT は ロケールが 定 義 されていないタイ 国 などに 対 して 開 発 されたもので 英 語 の 既 定 のロケールを 使 用 しますが 実 際 にデータベースでは 8 ビットのタイ 語 文 字 を 保 存 しま す CSP での 文 字 セットの 使 用 法 5