アプリケーションのグローバル化に関する問題の多くは、ColdFusion MX でサポートされる多様なソースのデータ処理に関連するものです。次に、ソースの例を示します。
この項では、これらの各データソースからのデータを処理する方法について説明します。
ColdFusion の以前のバージョン用に開発されたアプリケーションでは、文字の長さがバイト長に等しいという前提で開発されているものがあります。そのようなアプリケーションを ColdFusion MX で使用するとエラーが発生する場合があります。文字列のバイト長は、文字エンコードによって異なります。
複数のロケールをサポートするページでロケール別のコンテンツを処理する方法、およびユーロ値を処理する方法について、以下の項で説明します。
複数のロケールを使用するユーザーをサポートするアプリケーションで、ロケールに応じて異なる出力を生成する場合は、リクエストごとに SetLocale 関数を呼び出して、そのリクエストに対するロケールを設定します。処理が完了したら、ロケールを前の値に戻します。有用なテクニックとして、ユーザーが選択したロケールを何らかの Session 変数に保存しておき、セッション中の各ユーザーリクエストに対し、その Session 変数の値でロケールを設定するという方法があります。
ユーロはヨーロッパ諸国の通貨です。ColdFusion は正しく形式設定されたユーロ値の読み取りと書き込みをサポートしています。サポートされている他の通貨と異なり、ユーロはどの特定の国 (ロケール) にも関連付けられていません。LSCurrencyFormat および LSParseCurrency 関数の動作は、基礎となる JVM に依存し、通貨の表記規則は JVM により異なります。Sun JVM では、1.3 リリースはユーロをサポートしていなかったため、従来の国別の通貨を使用しました。1.4 リリースは 2002 年現在でユーロ地域に含まれるすべての通貨に対してユーロを使用します。ユーロをサポートしていない JVM をお使いの場合は、LSEuroCurrencyFormat および LSParseEuroCurrency 関数を使用して、通貨にユーロを使用しているロケールでユーロ値を形式設定して、解析します。
Web アプリケーションサーバーでは、文字データをリクエスト URL パラメータから受信するか、またはフォームデータとして受信します。
HTTP 1.1 標準では、URL 指定とメッセージヘッダに使用できるのは US-ASCII 文字 (0 ~ 127) だけです。したがって、ブラウザでは、"%xx"の 16 進数形式を使用して文字をエスケープ (URL エンコード) して、URL のアドレスおよびパラメータに指定されている ASCII 以外の文字をエンコードする必要があります。ただし、URL エンコードによって、Web ドキュメントでの URL の使用方法が決まるわけではありません。URL のエンコード方法だけが指定されます。
フォームデータではメッセージヘッダを使用して、リクエスト (Content ヘッダ) で使用されるエンコードおよびレスポンス (Accept ヘッダ) で使用されるエンコードを指定します。クライアントとサーバー間のコンテンツネゴシエーションではこの情報を使用します。
この項では、さまざまな文字エンコードで入力された URL およびフォームデータの処理方法を提案します。
サーバーに対する URL リクエストには、リクエストの一部として名前/値のペアが含まれている場合があります。たとえば、次の URL には URL の一部として名前/値のペアが含まれています。
http://company.com/prod_page.cfm?name=Stephen;ID=7645
前述したとおり、US-ASCII 以外の文字エンコードを使用して入力された URL 文字は、16 進数形式で URL エンコードされます。ただし、デフォルトでは、Web サーバーは URL 文字列の文字がシングルバイト文字であると見なします。
ASCII 以外の文字を URL 内で使用するための一般的な方法の 1 つに、URL のエンコードを定義する名前/値のペアを URL の一部として含める方法があります。たとえば、次の URL では、encoding というパラメータを使用して URL パラメータの文字エンコードを定義します。
http://company.com/prod_page.cfm?name=Stephen;ID=7645;encoding=Latin-1
他の名前/値のペアを処理する前に、product_name.cfm ページ内で encoding パラメータの値を確認することができます。これにより、パラメータの正しい処理が保証されます。
SetEncoding 関数を使用して、URL パラメータの文字エンコードを指定することもできます。SetEncoding 関数は、2 つのパラメータをとります。最初のパラメータは変数スコープを指定し、2 番目のパラメータはスコープで使用する文字エンコードを指定します。ColdFusion は URL スコープに URL パラメータを書き込むので、関数のスコープパラメータに "URL" を指定します。
たとえば、URL パラメータが Shift-JIS を使用して渡された場合、それらのパラメータには次のようにしてアクセスできます。
<cfscript>
setEncoding("URL", "Shift_JIS");
writeoutput(URL.name);
writeoutput(URL.ID);
</cfscript>
メモ: Shift-JIS 文字エンコードを指定するには、ハイフン (-) ではなくアンダースコア (_) の Shift_JIS 属性を使用します。
HTML の form タグと ColdFusion の cfform タグを使用すると、ユーザーはページ上にテキストを入力し、そのテキストをサーバーに送信できます。form タグは、シングルバイト文字データだけを処理するように設計されています。ColdFusion では文字列の保管時に 1 文字につき 2 バイトを使用するため、ColdFusion ではフォーム入力の各バイトを 2 バイト表現に変換します。
ただし、フォームにダブルバイトテキストが入力されると、HTML の form タグは各文字が 2 バイトであることを認識せずに、各バイトを 1 文字として解釈します。これにより、次の例のように入力テキストが破損します。
この問題を回避するには、SetEncoding 関数を使用して、入力フォームテキストの文字エンコードを指定します。SetEncoding 関数は、2 つのパラメータをとります。最初のパラメータは変数スコープを指定し、2 番目のパラメータはスコープで使用する文字エンコードを指定します。ColdFusion は Form スコープに form パラメータを書き込むので、関数のスコープパラメータに "Form" を指定します。入力テキストがダブルバイトの場合、ColdFusion はテキストの 2 バイト表現を保持します。
次の例では、フォームデータに韓国語の文字が含まれるように指定します。
<cfscript>
setEncoding("FORM", "EUC-KR");
</cfscript>
<h1>フォームのテスト結果</h1>
<strong>フォームの値 : </strong>
<cfset text = "String = #form.input1# , Length = #len(Trim(form.input1))#">
<cfoutput>#text#</cfoutput>
テキストファイルの読み取りと書き込みを行うには、cffile タグを使用します。デフォルトでは、cffile タグは、読み取り、書き込み、コピー、移動、または追加されるテキストが JVM デフォルトファイル文字エンコード形式であると仮定します。これは通常、システムのデフォルト文字エンコードです。cffile action="Read" の場合、ColdFusion MX はファイルの先頭に Byte Order Mark (BOM) があるかどうかもチェックします。BOM があれば、それによって指定される文字エンコードを使用します。
ファイル文字エンコードが JVM 文字エンコードと一致しない場合、問題が生じる可能性があります。特に、1 つのエンコードで文字に使用されるバイト数が別のエンコードで文字に使用されるバイト数と一致しないと、問題が発生します。
たとえば、JVM デフォルトファイル文字エンコードが ISO 8859-1 で、ファイルが Shift-JIS を使用するとします。ISO 8859-1 では各文字に対して 1 バイトを使用し、Shift-JIS では多くの文字に対して 2 バイト表現を使用します。このファイルを読み込むときに、cffile タグは各バイトを ISO 8859-1 文字として処理し、対応する 2 バイト Unicode 表現に変換します。文字は Shift-JIS 形式なので、データは破損し、1 つの 2 バイト Shift-JIS 文字が 2 つの Unicode 文字に変換されます。
JVM デフォルト文字エンコードでエンコードされていないテキストを cffile タグで正しく読み書きするには、charset 属性を渡します。次の例のように、読み書きするデータの文字エンコードを値として指定します。
<cffile action="read" charset="EUC-KR" file = "c:¥web¥message.txt" variable = "Message" >
ColdFusion アプリケーションは、サポートされている各データベースタイプに対しドライバを使用してデータベースにアクセスします。クライアントのネイティブ言語データタイプから SQL データタイプへの変換は、ドライバマネージャ、データベースクライアント、またはサーバーによって透過的に行われます。たとえば、JDBC API で使用する文字データ (SQL CHAR、VARCHAR) は、Unicode エンコード文字列で表現されます。
データベース管理者はデータソースを設定し、通常は、文字の列データの文字エンコードを指定する必要があります。Oracle、Sybase、Informix など主要なベンダの多くは、Unicode UTF-8 および UTF-16 を含む多くの文字エンコードでの文字データ保管をサポートしています。
ColdFusion MX で提供されるデータベースドライバは、データベースのネイティブ形式から ColdFusion Unicode 形式へのデータ変換を正しく処理します。データベースにアクセスするために、追加の処理は必要はありません。ただし、必ずデータベース管理者に相談してデータベースの文字エンコードの対応状況を確認してください。
ColdFusion は cfmail、cfmailparam、および cfmailpart タグを使用して電子メールメッセージを送信します。
デフォルトでは、ColdFusion はメールを UTF-8 エンコードで送信します。ColdFusion MX Administrator の [メール] ページで、デフォルトのエンコードを変更することができます。また、cfmail および cfmailpart タグの charset 属性を使用して、特定のメールメッセージ、または、マルチパート仕様のメールメッセージでは特定のパートに対して、文字エンコードを指定できます。
ColdFusion MX では、cfhttp および cfhttpparam タグと GetHttpRequestData 関数を使用して、HTTP 通信をサポートしています。
cfhttp タグは HTTP リクエストの作成をサポートします。cfhttp タグはデフォルトで Unicode UTF-8 エンコードを使用してデータを渡しますが、charset 属性を使用して文字エンコードを指定することもできます。cfhttpparam タグの mimeType 属性を使用して、ファイルの MIME タイプおよび文字セットを指定することもできます。
ColdFusion MX では、cfldap タグによって LDAP (Lightweight Directory Access Protocol) をサポートしています。LDAP では UTF-8 エンコード形式を使用するため、取得したすべてのデータを他のデータと合わせ、安全に操作できます。LDAP をサポートするために、追加の処理は特に必要ありません。
ColdFusion MX では、cfwddx タグをサポートしています。ColdFusion は、WDDX (Web Distributed Data Exchange) データを UTF-8 エンコードとして保管するため、ダブルバイト文字エンコードが自動的にサポートされます。WDDX でダブルバイト文字を処理するために、特殊な処理は必要ありません。
ColdFusion MX では、cfobject type="com" タグによって COM をサポートしています。COM インターフェイスで使用されるすべての文字列データは、ダブルバイト文字をサポートするワイド文字 (wchars) を使用して構築されます。COM オブジェクトとのインターフェイスをとるために、特殊な処理は必要はありません。
ColdFusion MX では、cfobject type="corba" タグによって CORBA をサポートしています。CORBA 2.0 インターフェイス定義言語 (IDL) の基本タイプ "String" では、フル 8 ビット (256) を使用して文字を表す Latin-1 文字エンコードを使用しました。
バージョン 2.1 以降の CORBA には、Java タイプ char および string にそれぞれマップする IDL タイプ wchar および wstring がサポートされているため、バージョン 2.1 以降の CORBA を使用している限り、ダブルバイト文字をサポートするために必要な処理はありません。
ただし、wchar および wstring をサポートしていないバージョンの CORBA を使用している場合、サーバーでは、テキストのシングルバイト表現を前提とする char および string データタイプが使用されます。
ColdFusion MX では、cfindex、cfcollection、および cfsearch タグによって Verity 検索をサポートしています。多言語検索をサポートするには、ColdFusion MX でさまざまな言語をサポートするために、CD に含まれている Verity Language Packs をインストールします。
ColdFusion MX 7 | ColdFusion MX 6.1 | ColdFusion MX* | ColdFusion 5* | フォーラム* | デベロッパーセンター | サポート情報 | バグ報告
バージョン7