1.9.1 C ライブラリのロケールサブシステムのリンク時における選択

C ライブラリのロケールサブシステムはリンク時に選択することも、実行時に選択可能になるように拡張することもできます。

以下にライブラリによるロケールカテゴリの使用について説明します。
  • 各ロケールカテゴリはデフォルトで C ロケール用として実装されます。C ライブラリでは、このほかに各ロケールカテゴリの ISO8859-1(Latin-1 アルファベット)実装が用意されています。この実装はリンク時に選択できます。
  • C および ISO8859-1 のデフォルト実装では、いずれも、通常の場合、実行時に選択できるロケールが各カテゴリに 1 つ用意されています。
  • 各ロケールカテゴリは個々に置き換えられます。
  • 各カテゴリには、任意の数のロケールを含めることができ、ロケールには任意の名前を付けることができます。
  • 各ロケールカテゴリには、ライブラリ専用のスタティックデータ内の 1 ワードが使用されます。
  • ロケールカテゴリのデータは読み出し専用であり、位置非依存型です。
  • scanf() によって LC_CTYPE ロケールカテゴリが強制的にインクルードされますが、いずれのデフォルトロケールでも、このインクルードによって数キロバイトのコードに追加されるのは、わずか 260 バイトの読み出し専用データのみです。
関連する概念
Shift-JIS および UTF-8 の実装
関連する参考文書
ISO8859-1 の実装

ISO8859-1 の実装

各ロケールカテゴリはデフォルトで C ロケール用として実装されます。C ライブラリでは、このほかに各ロケールカテゴリの ISO8859-1(Latin-1 アルファベット)実装が用意されています。この実装はリンク時に選択できます。

以下の表に、ISO8859-1(Latin-1 アルファベット)のロケールカテゴリを示します。

表 1-6 デフォルトの ISO8859-1 ロケール

シンボル 説明
__use_iso8859_ctype ISO8859-1(Latin-1)の文字体系が選択されます。この文字体系は、文字コード 160 ~ 255 で欧州言語の修辞記号、文字、アクセント文字が表現されている以外は、基本的に 7 ビットの ASCII コードと同じです。
__use_iso8859_collate Latin-1 アルファベットに適した strcoll/strxfrm 照合テーブルが選択されます。デフォルトの C ロケールには照合テーブルは必要ありません。
__use_iso8859_monetary Latin-1 コーディングを使用した英国通貨カテゴリが選択されます。
__use_iso8859_numeric 数値の出力において、カンマによる 3 桁区切りが選択されます。
__use_iso8859_locale 上記の ISO8859-1 でのすべての選択内容が選択されます。
ISO8859-1 には LC_TIME カテゴリはありません。

Shift-JIS および UTF-8 の実装

Shift-JIS および UTF-8 のロケールを使用すると、日本語と Unicode 文字を使用できます。

以下の表に、Shift-JIS(日本語文字)または UTF-8(Unicode 文字)のロケールカテゴリを示します。

表 1-7 デフォルトの Shift-JIS ロケールと UTF-8 ロケール

関数 説明
__use_sjis_ctype 文字セットに、日本語文字の Shift-JIS マルチバイトエンコーディングが設定されます。
__use_utf8_ctype 文字セットに、すべての Unicode 文字の UTF-8 マルチバイトエンコーディングが設定されます。
以下に Shift-JIS および UTF-8 エンコーディングの作用を説明します。
  • 通常の ctype 関数は、Shift-JIS での独立文字となるすべてのバイト値に対して正常に動作します。例えば、isalpha() によって半角カタカナはアルファベットとして処理されます。Shift-JIS では、半角カタカナは 0xA60xDF の範囲でシングルバイトとしてエンコードされています。
    UTF-8 エンコーディングでは、ASCII 文字セットと同じ自己完結した文字セットを使用します。
  • mbrtowc()mbsrtowcs()wcrtomb() などのマルチバイト変換関数は、すべて、Unicode のワイド文字列と Shift-JIS または UTF-8 のマルチバイト文字列の間で変換を行います。
  • printf("%ls") では Unicode ワイド文字列が Shift-JIS または UTF-8 出力に変換され、scanf("%ls") では Shift-JIS または UTF-8 入力が Unicode ワイド文字列に変換されます。
非機密扱いPDF file icon PDF 版ARM DUI0808CJ
Copyright © 2014, 2015 ARM.All rights reserved.