ネットワーク環境では、通信し合っているシステムのコード・セットと通信のプロトコルによって、ユーザの指定したデータが意味ある方法でリモート・システムに送信されるように、データの変換方法が決定されます。(ユーザ名でなく) ユーザ・データを送信側のコード・セットから受信側のコード・セットに変換したり、プロトコルに準拠するよう 8 ビット・データを 7 ビット形式に変換する必要があります。このことを達成するには一様なインタフェースが必要です。
次の例では、iconv_open()、iconv()、iconv_close() の使い方を説明し、iconv() インタフェースの使用方法を示しています。この変換を実行するには、 iconv_open() の次に必ず iconv() を続けてください。7 ビット変換および 8 ビット変換という用語は、それぞれ 7 ビット・データと 8 ビット・データの変換エンコーディングの意味で使用します。
プロトコルが 8 ビット・データを使用できる場合は、同じコード・セットが使用されているので 8 ビット・データを使用します。変換は必要ありません。
プロトコルが 7 ビット・データしか使用できない場合は、iconv() を使用します。
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 |
コード・セットの識別が必要 |
コード・セットの識別が必要 |
無効とは、選択したコード・セットとプロトコル型には変換エンコーディングは使用すべきでないという意味です。