A.8 ディレクトリにおけるグローバリゼーション・サポート
この項では、Oracle Internet Directoryで使用されるグローバリゼーション・サポートについて説明し、Oracle Internet Directory環境における様々なコンポーネントとツールに必要な環境変数NLS_LANGについて説明します。
関連項目:
グローバリゼーション・サポートを構成する前に、「グローバリゼーション・サポート」を参照してください。
この付録の内容は次のとおりです。
A.8.1 文字セットおよびディレクトリについて
コンピュータ・システムで文字を処理する場合、文字のグラフィカルな表現のかわりに数値コードを使用します。たとえば、データベースにAという文字を格納する場合、実際にはソフトウェアによって文字として解釈される数値コードが格納されます。
文字グループ(アルファベット文字、表意文字、記号、句読点および制御文字など)は、文字セットとしてエンコードできます。エンコードされた各文字セットでは、セット内の各文字に一意のコードを割り当てます。たとえば、ASCIIコード体系では、英語の大文字アルファベットの最初の文字の文字コードはOx4ですが、EBCDICコード体系ではOxc1です。
コンピュータ業界では多くのエンコードされた文字セットが使用されています。これらの文字セットは、利用可能な文字の数やタイプおよび様々な面で異なります。
データベースの作成時には、エンコードされた文字セットを指定します。文字セットを選択すると、特に、データベース内で表示される言語が決定されます。
ほとんどの各国語文字セット、国際文字セットおよびベンダー固有文字セットの標準がサポートされています。
この項では、次の項目について説明します。
A.8.1.1 Unicodeについて
日々のE-Businessの要件を満たすために必要な文字が十分に含まれている単一の文字セットはありません。たとえば、欧州連合内のすべての言語を表すことのできる各国語文字セットはありません。さらに、異なる文字セットでは同じ文字が異なるコードで表されている場合もあるため、文字セット間で競合が起きる可能性もあります。
これらの問題に対処するために、Unicodeと呼ばれるグローバルな文字セットが開発されました。これは、句読点、発音区別符号、数学記号、技術記号、音楽記号などを含むあらゆる言語の情報を格納できる、汎用のエンコードされた文字セットです。Unicode標準のバージョン3.2以降では、世界中のアルファベット、表意文字セットおよび記号のコレクションから、95,000を超える文字がサポートされています。これには45,000の補助文字が含まれており、そのほとんどは、まれにしか使用されないものの電子ドキュメントで表示するために必要な中国語、日本語および韓国語の文字です。
A.8.1.2 Unicodeの実装
Unicodeには複数の実装標準があります。これを表A-24に示します。
表A-24 Unicodeの実装
| 実装 | 説明 |
|---|---|
|
UTF-8 |
Unicodeの可変幅8ビット・エンコーディング。1つのUnicode文字は1、2、3または4バイトになります。ヨーロッパ言語の記述に含まれる文字は、1バイトまたは2バイトで表示されます。アジア言語の記述に含まれる文字は3バイトで表示され、補助文字は4バイトで表示されます。 |
|
UCS-2 |
Unicodeの固定幅16ビット・エンコーディング。記述に関係なく、各文字は2バイトです。 |
|
UTF-16 |
Unicodeの16ビット・エンコーディング。Unicode 3.1で追加された補助文字をサポートするためのUCS-2の拡張方式です。 1つの文字は2バイトまたは4バイトです。ヨーロッパ言語およびアジア言語の記述に含まれる文字は2バイトで表示され、補助文字は4バイトで表示されます。 |
A.8.2 NLS_LANGパラメータのコンポーネント
NLS_LANGパラメータの各コンポーネントによって、グローバリゼーション・サポート機能のサブセットの操作が制御されます。
NLS_LANGパラメータには、language、territoryおよびcharsetの3つのコンポーネントがあります。形式は次のとおりです。
NLS_LANG = language_territory.charset
NLS_LANGパラメータのコンポーネントは、表A-25に示すとおりです。
表A-25 NLS_LANGパラメータのコンポーネント
| コンポーネント | 説明 |
|---|---|
|
|
Oracleメッセージ、曜日および月の名前に使用する言語などの規則を指定します。サポートしているそれぞれの言語には、American English(米語)、French(フランス語)またはGerman(ドイツ語)などの固有の名前があります。 languageを指定しない場合、デフォルトではAmerican English(米語)になります。 関連項目: 言語の全一覧は、Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』のNLS_LANGUAGEに関する項を参照してください |
|
|
デフォルトのカレンダ、照合、日付、通貨単位および数値書式などの規則を指定します。サポートしているそれぞれの地域には、America(アメリカ)、France(フランス)またはCanada(カナダ)などの固有の名前があります。 territoryを指定しない場合、デフォルト値ではAmericaになります。 関連項目: 言語の全一覧は、Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』のNLS_TERRITORYに関する項を参照してください |
|
|
クライアント・アプリケーションが使用する文字セット(通常はユーザー端末で使用する文字セット)を指定します。サポートしているそれぞれの文字セットには、WE8MSWIN1252、JA16SJISまたはAL32UTF8などの一意の頭字語があります。 関連項目: 文字セットの全一覧は、Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください |
A.8.3 コマンド行からのNLS_LANGパラメータの設定
コマンド行で、NLS_LANGを環境変数として設定できます。
次は、NLS_LANGの適切な値の例です。
-
AMERICAN_AMERICA.AL32UTF8 -
JAPANESE_JAPAN.AL32UTF8
A.8.4 非AL32UTF8データベースの使用の制限事項
Oracleディレクトリ・サーバーとデータベース・ツールは、非AL32UTF8データベース上で実行できますが、クライアント文字セットにある文字がすべて、文字コードが同じかどうかにかかわらず、データベース文字セットに含まれているかどうかを確認してください。
そうでない場合、ldapadd、ldapdelete、ldapmodifyまたはldapmodifydn操作中にデータが消失する可能性があります。たとえば、シングルバイト文字のみを使用する基礎となるデータベース上で、マルチバイト文字セットを使用してldapadd操作を実行すると仮定します。入力するバイトのすべてがデータベースで受け入れられるわけではないため、データが消失します。
A.8.5 LDIFファイルでのグローバリゼーション・サポートの使用方法
属性タイプの名前は必ずASCII文字列で、マルチバイト文字は使用できません。Oracle Internet Directoryは、属性の型名にマルチバイト文字をサポートしていません。ただし、Oracle Internet Directoryでは、属性値におけるマルチバイト文字(簡体字中国語(ZHS16GBK)の文字セットなど)の使用をサポートしています。
属性値は、異なる方法でエンコードでき、この方法でエンコードされた値は、Oracle Internet Directoryのツールで正しく解釈できます。次の項で説明する2つのシナリオがあります。
関連項目:
『Oracle Identity Managementリファレンス』のLDIFファイルの書式設定に関する項。
A.8.5.1 ASCII文字列のみを含むLDIFファイルの解釈
この例では、属性値の文字列もASCII文字列です。
すべてのツールがデフォルトでUTF-8文字セットを使用しており、ASCIIはUTF-8の正しいサブセットであるため、いずれのツールもこのファイルを解釈できます。キーボードでASCII文字列のみの値を入力する場合も同様です。
A.8.5.2 UTF-8エンコーディング文字列を含むLDIFファイルの解釈
この例では、属性値の文字列もUTF-8文字列です。
デフォルトでは、すべてのツールでUTF8文字セットが使用されるため、これらのファイルはどのツールでも解析できます。キーボードでUTF-8文字列の値を入力する場合も同様です。
このようなファイルでは、一部の文字がマルチバイトの可能性があります。マルチバイト・キャラクタ文字列は、属性値としてLDIFファイルで使用することも、キーボードで入力することもできます。それらの文字列は、ネイティブ文字セットまたはUTF-8でエンコードできます。さらに、ネイティブ文字列またはUTF-8文字列のBASE64エンコーディング形式も可能です。
次のケースを説明します。
ディレクトリ・サーバーはUTF-8エンコーディング文字列のみを理解し、UTF-8エンコーディング文字列を受信することを想定しているため、1番目、3番目および4番目のケースは、LDAPサーバーに送信する前に、UTF-8文字列に変換しておく必要があります。
A.8.5.2.1 非UTF-8ネイティブ文字列の使用方法
NLS_LANGが設定されていない場合、コマンド行LDAPツールldapadd、ldapaddmt、ldapbind、ldapcompare、ldapmoddn、ldapmod、ldapdeleteおよびldapsearchで-E character_set引数を使用します。NLS_LANGが設定されている場合、-E character_set引数を使用する必要はありません。
この例では、簡体字中国語のネイティブ文字列をUTF-8に変換しています。ベース識別名は、簡体字中国語で記述できます。
ldapsearch -h my_host -D "cn=orcladmin" -q -p 3060 -E ".ZHS16GBK" -b base_DN \
-s base "objectclass=*"
encode="character_set"引数をコマンド行バルク・ツールbulkload、bulkmodify、bulkdeleteおよびldifwriteで使用します(ここで、character_setはLDIFファイルで使用されている文字セットです)。NLS_LANGをディレクトリのデータベースで使用されている文字セットに設定します。
A.8.5.2.3 BASE64でエンコードされたUTF-8文字列の使用方法
NLS_LANGが設定されていない場合でも、LDAPツールで-E character_set引数を使用する必要はありません。
コマンド行ツールでencode=character_set引数を使用する必要はありません。Oracle Internet Directoryツールは、BASE64でエンコードされたUTF-8文字列をUTF-8文字列に自動的にデコードします。
A.8.5.2.4 BASE64でエンコードされたネイティブ文字列の使用方法
NLS_LANGが設定されていない場合、コマンド行LDAPツールldapadd、ldapaddmt、ldapbind、ldapcompare、ldapmoddn、ldapmod、ldapdeleteおよびldapsearchで-E character_set引数を使用します。NLS_LANGが設定されている場合、-E character_set引数を使用する必要はありません。
encode="character_set"引数をコマンド行バルク・ツールbulkload、bulkmodify、bulkdeleteおよびldifwriteで使用します(ここで、character_setはLDIFファイルで使用されている文字セットです)。NLS_LANGをディレクトリのデータベースで使用されている文字セットに設定します。
Oracle Internet Directoryのツールは、BASE64でエンコードされたネイティブ文字列を、単純なネイティブ文字列に自動的にデコードします。その後、ネイティブ文字列は対応するUTF-8文字列に変換されます。
ノート:
1つの入力ファイルで使用できる文字セットは1つのみです。
A.8.6 コマンド行LDAPツールでのグローバリゼーション・サポートの使用方法
Oracle Internet Directoryのコマンド行ツールは、キーボード入力またはLDIFファイルを読み取ります。
コマンド行ツールはキーボード入力を次の方法で読み取ります。
-
ASCII文字のみ
-
非ASCII入力(ネイティブ言語文字セット)
-
UTF-8またはネイティブ文字列のBASE64でエンコードされた値(LDIFファイル入力のみ)
LDIFファイルまたはキーボードからの入力として使用されている文字セットがUTF-8以外の場合、コマンド行ツールは、LDAPサーバーに送信する前に、その入力をUTF-8形式に変換する必要があります。
この項の内容は次のとおりです。
A.8.6.1 コマンド行ツールでの他の文字セット入力のUTF-8への変換
コマンド行ツールで入力をUTF-8に変換するには、-E character_set引数を、任意のコマンド行LDAPツールで指定します。
encode="character_set"引数を、bulkload、bulkmodify、bulkdeleteおよびldifwriteで指定します。
A.8.6.2 各ツールを使用するときの-E引数の指定
-E引数で指定しないかぎり、クライアント・ツールでは常に文字セットがUTF-8(Oracle文字セット名はAL32UTF8)であるとみなされます。-E引数が指定されていると、BASE64でエンコードされた値はデコードされ、次にデコードされたバッファがUTF-8に変換されます。
たとえば、-E ".ZHS16GBK"と指定すると、デコードされたバッファは、ディレクトリ・サーバーに送信される前に、簡体字中国語(GBK)からUnicode UTF-8に変換されます。
-E引数を指定すると、-E引数で指定した文字セット(-E ".character_set")がAL32UTF8文字セットに正しく変換されます。
コマンド行ツールは、-E引数を使用して、-E引数に指定された文字セットで入力を処理します。出力は、環境変数NLS_LANGで指定された文字セットで表示します。
たとえば、簡体字中国語の文字セット(ZHS16GBK)でエンコードされたLDIFファイルのエントリを、ldapaddを使用して追加するには、次のように入力します。
ldapadd -h myhost -p 3060 -E ".ZHS16GBK" -D cn=orcladmin -q -f my_ldif_file
この例では、ディレクトリ・サーバーに送信される前に、文字がldapaddツールによって".ZHS16GBK"(簡体字中国語の文字セット)から".AL32UTF8"に変換されます。
A.8.6.3 コマンド行LDAPツールでの-E引数の使用方法
コマンド行LDAPツールで適切な-E引数を使用する必要があります。
表A-26に、-E引数を各コマンド行ツールで正しく使用する方法の追加例を示します。各例のコマンドにより、値".ZHS16GBK"で指定されている簡体字中国語からAL32UTF8にデータが変換されます。たとえば、各コマンドで、-Dオプションの値、および-qが指定された場合にプロンプトで入力するパスワードはGBKです。-E引数を指定すると、これらがUTF-8に変換されます。
表A-26の例には、.ZHS16GBK文字セットに属している実際の文字は含まれていないことに注意してください。したがって、これらの例は-E引数の指定なしで動作します。ただし、引数の値に.ZHS16GBK文字セット内の実際の文字が含まれる場合は、-E引数を使用する必要があります。
関連項目:
各コマンド行ツールの構文と使用上のノートは、『Oracle Identity Managementリファレンス』のOracle Internet Directory管理ツールに関する項を参照してください
表A-26 例: コマンド行ツールでの-E引数の使用方法
| ツール | 例 |
|---|---|
|
|
ldapbind -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
|
ldapsearch -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
|
ldapadd -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
|
ldapaddmt -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
|
ldapmodify -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
|
ldapmodifymt -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
|
ldapdelete -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" -q |
|
|
ldapcompare -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" \ -b "ou=Construction,ou=Manufacturing,o=example,c=us" \ -a title -v manager -q |
|
|
ldapmoddn -h my_host -p 3060 -E ".ZHS16GBK" -D "o=example,c=us" \ -b "cn=Frank Smith,ou=Construction,ou=Manufacturing,c=us, o=example"\ -N "ou=Contracting,ou=Manufacturing,o=example,c=us" -r -q |
A.8.7 クライアント環境におけるNLS_LANGの設定
クライアントで必要な出力がUTF-8の場合は、環境変数NLS_LANGを設定する必要はありません。この場合、環境変数NLS_LANGの文字セット・コンポーネントはデフォルトでAL32UTF8に設定され、クライアントからサーバーへの入力の過程およびサーバーからクライアントへの出力の過程で、文字セット変換の必要はありません。
クライアントで必要な出力がUTF-8以外の場合は、環境変数NLS_LANGを設定する必要があります。この設定によって、AL32UTF8文字セットからクライアントが要求した文字セットに正しく変換されます。
たとえば、環境変数NLS_LANGが簡体字中国語の文字セットに設定されている場合、コマンド行ツールは、その文字セットで出力を表示します。そうでない場合、出力にはデフォルトでAL32UTF8文字セットが使用されます。
ノート:
Microsoft Windowsを使用している場合、サーバーの起動後にコマンド行ツールを使用するには、MS-DOSウィンドウでNLS_LANGをリセットする必要があります。MS-DOSセッションのコード・ページに一致する文字セットを設定してください。AL32UTF8は使用できません。MS-DOSセッションでコマンド行ツールに使用する文字セットの詳細は、『Oracle® Databaseインストレーション・ガイドfor Microsoft Windows』を参照してください。
Oracle Internet Directoryとともに、事前にインストールされたOracle Databaseを使用している場合、データベース文字セットもAL32UTF8に設定する必要があります。
関連項目: Oracle Databaseドキュメント・ライブラリの『Oracle Databaseグローバリゼーション・サポート・ガイド』のNLS_LANGUAGEに関する項、および『Oracle Databaseインストレーション・ガイドfor Microsoft Windows』。
レジストリのNLS_LANGパラメータの値を変更しないように注意してください。
A.8.8 バルク・ツールでのグローバリゼーション・サポートの使用方法
Oracle Internet Directoryでは、LDIFファイルのテキスト・データの読取りや書込みが、LDAP標準で指定されているように、常にUTF-8エンコーディングで行われます。
この項では、各バルク・ツールで使用する引数の例を示します。内容は次のとおりです。
-
bulkmodifyでのグローバリゼーション・サポートの使用方法
関連項目:
各バルク・ツールの引数のリストは、『Oracle Identity Managementリファレンス』のOracle Internet Directory管理ツールに関する項を参照してください
A.8.8.1 bulkloadでのグローバリゼーション・サポートの使用方法
コマンドに引数encode="character_set"を追加します。この入力のLDIFファイルは"character_set"でエンコードされています。
たとえば、DOMAIN_HOMEが設定されているのを確認してから、次を入力します。
bulkload connect="connect_string" \
encode=".ZHS16GBK" check="TRUE" generate="TRUE" file="my_ldif_file"A.8.8.2 ldifwriteでのグローバリゼーション・サポートの使用方法
ldifwriteユーティリティは常に、マルチバイト文字列に対してBASE64でエンコードされた値を書き出します。
BASE64エンコーディングは、ディレクトリ・サーバーに格納されているUTF-8文字列に対して行うか、ldifwriteの実行時に環境変数NLS_LANGの設定で指定されたネイティブ文字列に対して行うことができます。
たとえば:
ldifwrite connect="connect_string" baseDN="baseDN" ldiffile="output_file"
環境変数NLS_LANGが未設定の場合またはlanguage_territory.AL32UTF8に設定されている場合、この例では、出力のLDIFファイルにマルチバイト文字のBASE64でエンコードされたUTF-8文字列が含まれます。
このLDIFファイルのディレクトリへのロードの詳細は、「BASE64でエンコードされたUTF-8文字列の使用方法」を参照してください。
環境変数NLS_LANGがAL32UTF8以外の文字セット(たとえば、".ZHS16GBK")に設定されている場合は、出力のLDIFファイルには、簡体字中国語(GBK)文字列のBASE64でエンコードされた値が含まれます。
このLDIFファイルのディレクトリへのロードの詳細は、「BASE64でエンコードされたネイティブ文字列の使用方法」を参照してください。
A.8.8.3 bulkdeleteでのグローバリゼーション・サポートの使用方法
引数encode="character_set"をコマンドに追加します。
たとえば:
bulkdelete connect="connect_string" encode=".ZHS16GBK" \
baseDN="ou=manufacturing,o=example,c=us"
この例では、-baseオプションの値に、ZHS16GBKネイティブ文字セット(簡体字中国語)を使用できます。