共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)

変換の概念

この節では、8 ビットのユーザ名と 8 ビット・データが、ftp、メール、デスクトップ・クライアント間のクライアント間通信などの通信ユーティリティによりネットワーク上で通信できる方法を説明します。

データを通信するにあたって、まず考慮すべき点が 3 つあります。

リモート・ホストがローカル・ホストと同じコード・セットを使用する場合は、次の事項が真になります。

リモート・ホストのコード・セットがローカル・ホストのコード・セットと異なるときは、次の 2 つの場合が当てはまります。必要な変換は、使用される特定のプロトコルに依存します。

iconv インタフェース

ネットワーク環境では、通信し合っているシステムのコード・セットと通信のプロトコルによって、ユーザの指定したデータが意味ある方法でリモート・システムに送信されるように、データの変換方法が決定されます。(ユーザ名でなく) ユーザ・データを送信側のコード・セットから受信側のコード・セットに変換したり、プロトコルに準拠するよう 8 ビット・データを 7 ビット形式に変換する必要があります。このことを達成するには一様なインタフェースが必要です。

次の例では、iconv_open()iconv()iconv_close() の使い方を説明し、iconv() インタフェースの使用方法を示しています。この変換を実行するには、 iconv_open() の次に必ず iconv() を続けてください。7 ビット変換および 8 ビット変換という用語は、それぞれ 7 ビット・データと 8 ビット・データの変換エンコーディングの意味で使用します。

送信側と受信側が同じコード・セットを使用している場合
送信側と受信側が異なるコード・セットを使用している場合

locale_codeset は、そのロケールのアプリケーションによって使用されているコード・セットです。nl_langinfo()(CODESET) 関数を使用して現在のロケールに関連付けられたコード・セットを獲得できますが、それは変換名が nl_langinfo()(CODESET) 関数からの戻り値と一致するかどうかは実装に依存します。

表 3-1 に、さまざまな条件のもとで変換を実行する際の iconv() の使用方法を示します。プロトコルによっては他の変換が必要な場合もあります。

表 3-1 変換を実行するための iconv の使用方法

 

同じコード・セットを使用するシステムとの通信 (例: XYZ) 

異なるコード・セットを使用するシステムとの通信、または受信側のコード・セットが不明 

使用する変換 

7 ビット・プロトコル 

8 ビット・プロトコル 

7 ビット・プロトコル 

8 ビット・プロトコル 

コード XYZ 

無効 

最適 

無効 

リモート・コード・セットが不明の場合無効 

7 ビット変換 ISO2022 

OK 

OK 

最適 

OK 

8ビット変換 ISO2022, ISO10646 

無効 1

OK 

無効 

最適 

7 ビットタグなし引用符付き印刷可能な uucode 

OK 

OK 

コード・セットの識別が必要 

コード・セットの識別が必要 

8 ビットタグなし base64 

無効 

OK 

コード・セットの識別が必要 

コード・セットの識別が必要 

  1. 無効とは、選択したコード・セットとプロトコル型には変換エンコーディングは使用すべきでないという意味です。

状態を持つ変換と状態を持たない変換

コード・セットは、状態を持つ (ステートフルな) エンコーディングと状態を持たない (ステートレスな) エンコーディングの 2 つのカテゴリに分類できます。

状態を持つエンコーディング

状態を持つエンコーディングは、特定のコード値に関連付けられた文字セットを変換するのに、シフトイン / シフトアウトなどの制御コードのシーケンスを使用します。

たとえば、コンパウンド・テキストでは、文字データの流れの中で日本語 16 ビット・データの開始を示すのにコントロール・シーケンス「ESC$(B」を使用できます。また、「ESC(B」は、そのダブルバイト文字データの終了と 8 ビット ASCII データの開始を示すのに使用できます。状態を持つエンコーディングでは、ビット値 0x43 はシフト状態が不明の場合解釈できません。EBCDIC アジア・コード・セットは、シフトイン制御とシフトアウト制御を、それぞれダブルバイトとシングルバイト・エンコーディング間の入れ換えに使用します。

別のコード・セットへの状態を持つエンコーディング変換を行うために記述されるコンバータは、特別な処理が必要なためにやや複雑になります。

状態を持たないエンコーディング

状態を持たないコード・セットは、次の 2 つのうちの 1 つに分類できます。

マルチバイト・コード・セットという用語は、1 つの文字をエンコードするのに 1 つ以上のバイトを必要とするコード・セットにも使います。マルチバイト・コード・セットは状態を持たないと見なされます。


注 -

コード・セットが同じ文字セットを表すときに限り、変換してください。