前へ | 次へ | 目次 | 索引 |
HP C RTL では,ASCII でエンコーディングされた Portable Character Set を含む数多くの状態独立コードセットおよびコードセット・エンコード方式がサポートされます。状態依存コードセットはサポートされません。サポートされるコードセットは次のとおりです。
コードセット内の文字は charmap ファイルに定義されています。弊社が提供する charmap ファイルは, SYS$I18N_LOCALE 論理名によって定義されるディレクトリにあります。 charmap ファイルのファイル・タイプは .CMAP です。
10.7.2 コンバータ関数
HP C RTL では異なる文字セットをサポートするだけでなく,文字をあるコードセットから別のコードセットに変換するための次のコンバータ関数も提供しています。
コードセット・コンバータのファイル命名規則は次のとおりです。
fromcode_tocode.iconv |
ただし,fromcode はソース・コードセットの名前であり, tocode は文字の変換先のコードセットの名前です。
コードセット・コンバータをシステムに追加するには, SYS$I18N_ICONV という論理名によって示されるディレクトリにコンバータ・ファイルをインストールします。
コードセット・コンバータ・ファイルは,テーブル・ベースの変換ファイルとしてインプリメントすることができ, OpenVMS 共用可能イメージとして作成されたアルゴリズム・ベースのコンバータ・ファイルとしてインプリメントすることもできます。
テーブル・ベースのコードセット・コンバータ・ファイルを作成するには,次の手順を実行します。
共用可能イメージとしてインプリメントされたアルゴリズム・ベースのコードセット・コンバータ・ファイルを作成するには,次の操作を実行します。
デフォルト設定では,SYS$I18N_ICONV は検索リストであり,リスト SYS$SYSROOT:[SYS$I18N.ICONV.USER] 内の最初のディレクトリは, iconvコードセット・コンバータのサイト固有のリポジトリとして使用されます。
インストールされているコードセットとロケールの数はシステムごとに異なります。システムにイントスールされているコードセット,コンバータ,ロケールについては, SYS$I18N ディレクトリ・ツリーを確認してください。
10.8 カルチャー固有の情報の取り扱い
各ロケールには,次のカルチャー情報が格納されています。
このカルチャー情報は,
nl_langinfo関数と
localeconv関数を使用して部分的に取り出すことができます。 第 10.8.1 項 を参照してください。
10.8.1 ロケールからのカルチャー情報の抽出
nl_langinfo関数は,プログラムの現在のロケールから取得した情報項目を含む文字列を指すポインタを返します。ロケールから抽出できる情報は次のとおりです。
localeconv関数は,LC_NUMERIC カテゴリと LC_MONETARY カテゴリから数値の書式データと通貨の書式データを格納した構造体を指すポインタを返します。
10.8.2 日付と時刻の書式関数
日付および時刻情報を使用する関数は次のとおりです。
strfmon関数はロケール内の通貨情報を使用して,数値を文字列に変換します。文字列の書式は書式設定文字列によって制御されます。
10.8.4 数値の書式設定
LC_NUMERIC 内の情報はさまざまな関数で使用されます。たとえば,
strtod,
wcstod,およびプリント関数やスキャン関数は, LC_NUMERIC カテゴリから小数点文字を判断します。
10.9 ワイド文字を取り扱うための関数
文字はコードセットに応じて,シングル・バイトまたはマルチバイトの値で表現できます。シングル・バイト文字とマルチバイト文字をどちらも同じ方法で簡単に取り扱うことができるように, HP C RTL ではワイド文字データ型 wchar_tを定義しています。このデータ型は,1 バイト,2 バイト,3 バイト,4 バイトのいずれかの値で表現される文字を格納できます。
ワイド文字をサポートするために提供される関数は次のとおりです。
ロケール内の LC_CTYPE カテゴリは,ロケールのコードセットに含まれる文字を異なるタイプ ( 英字,数字,小文字,大文字など ) に分類します。 2 組の関数があり,1 組はワイド文字用,もう 1 組はシングル・バイト文字用で,文字が特定のタイプであるかどうかを判定します。 is*関数はシングル・バイト文字を判定し, isw*関数はワイド文字を判定します。
たとえば,
iswalnum関数は,ワイド文字が英字として分類されるのか,数字として分類されるのを判定します。文字がこれらのいずれかのタイプである場合は,0 以外の値を返します。分類関数の詳細については, 第 3 章 と「リファレンス・セクション」を参照してください。
10.9.2 大文字/小文字変換関数
LC_CTYPE カテゴリは,ロケールの 2 組の文字の間のマッピングを定義します。最も一般的な文字マッピングは大文字と小文字の間のマッピングです。しかし,ロケールでは大文字と小文字のマッピング以外のマッピングもサポートできます。
ロケールの LC_CTYPE カテゴリの情報に従って,ある文字を別の文字に変換するために 2 つの関数が用意されています。
大文字と小文字の間のマッピングのために 2 つの関数が用意されています。
これらの関数の詳細については,「リファレンス・セクション」を参照してください。
10.9.3 ワイド文字の入出力のための関数
複数の入出力関数によって,ワイド文字およびワイド文字の文字列が管理されます。
ワイド文字とワイド文字の文字列を読み込むための関数は, fgetwc, fgetws, getwc, getwcharです。
ワイド文字を入力ストリームに戻すための ungetwc関数も用意されています。
ワイド文字およびワイド文字の文字列を書き込むための関数は, fputwc, fputws, putwc, putwcharです。
スキャン関数はすべて,現在のロケールの LC_NUMERIC カテゴリに定義されているカルチャー固有の小数点文字を検索します。
%lc,%C,%ls,%S 変換指定子を使用すると,スキャン関数 fwscanf, wscanf, swscanf, fscanf, scanf, sscanfはワイド文字を読み込むことができます。
すべてのプリント関数は,現在のロケールの LC_NUMERIC カテゴリに定義されているデータに従って,数値の書式を設定できます。
プリント関数で使用される %lc,%C,%ls,%S 変換指定子は,ワイド文字をマルチバイト文字に変換し,変換結果の文字をプリントします。
入出力関数の詳細については, 第 2 章 を参照してください。
10.9.4 マルチバイト文字とワイド文字の変換のための関数
ワイド文字は通常,シングル・バイト文字やマルチバイト文字をアプリケーションで管理するために内部的に使用されます。しかし,テキスト・ファイルは一般にマルチバイト文字形式で格納されます。これらのファイルを処理するには,マルチバイト文字をワイド文字形式に変換する必要があります。この変換は次の関数を使用して行うことができます。
同様に,次の関数はワイド文字を対応するマルチバイト文字に変換します。
これらの変換関数に関連して, mblen関数と mbrlen関数はマルチバイト文字のサイズを判断するために使用されます。
複数のワイド文字関数は,「
mbstate_tを指すポインタ」型の引数を受け付けます。ただし,
mbstate_tは状態依存コードセットの変換状態を保持するために使用される opaque データ型です (
FILEや
fpos_tなど)。
10.9.5 ワイド文字の文字列および配列を操作するための関数
HP C RTL には,ワイド文字の文字列を操作する関数 ( wcs* 関数と wmem* 関数) があります。たとえば, wcscat関数は, strcat関数が char 型の文字列に対して動作する方法と同じ方法で,ワイド文字の文字列を別の文字列の末尾に追加します。
文字列操作関数の詳細については, 第 3 章 を参照してください。
10.10 照合関数
国際化環境では,文字列比較関数はマルチパス照合ができなければなりません。照合する場合は次の要件を満たす必要があります。
照合順序情報はロケールの LC_COLLATE カテゴリに格納されています。 HP C RTL には,この照合順序情報を使用して 2 つの文字列を比較するために, strcoll関数と wcscoll関数が用意されています。
strcollまたは wcscollによるマルチパス照合は, strcmp関数や wcscmp関数を使用するより速度が遅くなる可能性があります。プログラムで strcollまたは wcscollを使用して多くの文字列の比較を行う必要がある場合は, strxfrmまたは wcsxfrm関数を使用して文字列をいったん変換した後, strcmp関数や wcscmp関数を使用すると,処理速度を向上できます。
照合順序という用語は,文字の相対的な順序のことを示します。照合順序はロケール固有であり,一部の文字は無視されることがあります。たとえば,米語の辞書では単語の間のハイフンは無視され, take-out という用語は takeoff と takeover の間にリストされます。
一方,比較という用語は,文字が同じであるのか,異なるのかを調べることを意味します。たとえば, takeout と take-out は照合順序が同じであっても,異なる単語です。
アプリケーションで単語のリストをソートした後,バイナリ検索を実行して単語を迅速に検索できるようにする場合について考えてみましょう。 strcmp関数を使用すると, take-in,take-out, take-up はテーブルの 1 つの部分にまとめられます。 strcollを使用し,ハイフンを無視するロケールを使用すると, take-out は takeoff および takeover と同じグループにまとめられますが,takeout と重複すると解釈されます。バイナリ検索で takeout が take-out の複製として検索されるのを回避するには,アプリケーションでバイナリ・ツリーを作成するために strcollではなく, strcmpを使用する必要があります。
前へ | 次へ | 目次 | 索引 |