プラットフォーム SDK
GetStringTypeEx
指定した文字列に含まれる各文字の文字種情報を取得します。文字列中の各文字について、出力配列の対応する 16 ビットの要素を構成する 1 つ以上のビットがセットされます。各ビットは、対応する文字の特定の文字種(英字、数字、そのどちらでもないなど)を識別します。
GetStringTypeA 関数や GetStringTypeW 関数と異なり、#define UNICODE によって A 版、または W 版の正しい方が呼び出されます。Win32 アプリケーションでは、できるだけこの関数を使ってください。
BOOL GetStringTypeEx(
LCID Locale, // ロケール識別子
DWORD dwInfoType, // 取得する情報の種類を指定する値
LPCTSTR lpSrcStr, // 調査対象文字列のアドレス
int cchSrc, // 調査対象文字列のサイズ(バイト数または文字数)
LPWORD lpCharType // 出力バッファのアドレス
);
パラメータ
- Locale
- ロケール識別子を指定します。関数は、このロケールによって一意に定義される ANSI コードページを使って、lpSrcStr が指す文字列を ANSI から Unicode に変換します。変換した各 Unicode 文字を分析し、文字種情報を取得します。W 版は、このパラメータを無視します。
MAKELCID マクロによって作成される識別子、または次のいずれかの定数を指定します。
| LOCALE_SYSTEM_DEFAULT | 既定のシステムロケール |
| LOCALE_USER_DEFAULT | 既定のユーザーロケール |
- dwInfoType
- 取得したい文字情報の種類を指定します。さまざまな種類が複数のレベルに分かれています(それぞれの種類に含まれる情報については、「解説」にある表を参照してください)。次のいずれかの定数を指定します。
| CT_CTYPE1 | 文字種情報を取得します。 |
| CT_CTYPE2 | 左右文字方向情報を取得します。 |
| CT_CTYPE3 | テキスト処理情報を取得します。 |
- lpSrcStr
- 文字種を調べたい文字列へのポインタを指定します。cchSrc パラメータに–1 を指定すると、文字列は NULL で終わると見なされます。この文字列は、関数の W 版を使う場合は Unicode 文字列、A 版を使う場合は ANSI 文字列でなければなりません。A 版を使う場合、ロケールが DBCS(ダブルバイト文字セット)に対応するときは、DBCS 文字列を指定することができます。
- cchSrc
- lpSrcStr が指す文字列のサイズをバイト単位(ANSI 版)または文字単位(Unicode 版)で指定します。文字列の最後の NULL を含めると、その NULL の文字種情報も返ります。この値に–1 を指定すると、文字列は NULL で終わると見なされ、長さが自動的に計算されます。
- lpCharType
- 16 ビット値の配列へのポインタを指定します。この配列は、指定した文字列に含まれる文字数と同じ数の 16 ビット値を受け取るのに十分な長さでなければなりません。この配列には、指定した文字列に含まれる文字数と同じ数のワードが格納され、それぞれのワードが指定した文字列のそれぞれの文字に対応します。
戻り値
関数が成功すると、0 以外の値が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、GetLastError 関数を使います。GetLastError 関数は、次のいずれかのエラーコードを返します。
ERROR_INVALID_FLAGS
ERROR_INVALID_PARAMETER
解説
GetStringTypeEx 関数は、GetStringTypeA 関数と GetStringTypeW 関数のパラメータの違いによる制約を回避するためのものです。このパラメータの違いのために、#define UNICODE によって GetStringType* の正しいバージョン(A または W)を自動的に呼び出すことができません。一方、GetStringTypeEx 関数を使うと、#define UNICODE によって正しいバージョンが呼び出されます。Win32 関数では、できるだけ GetStringTypeEx 関数を使ってください。
Locale パラメータは、Unicode への文字列変換にのみ使われます。関数が返す CTYPE とは関係ありません。CTYPE は Unicode コードポイントによってのみ決まり、ロケールごとに異なることはありません。たとえばギリシャ文字は、Locale パラメータに指定する値にかかわらず、C1_ALPHA です。
lpSrcStr パラメータと lpCharType パラメータは同じにできません。同じにすると、関数が失敗します。GetLastError 関数を呼び出すと、ERROR_INVALID_PARAMETER が返ります。
文字種ビットはいくつかのレベルに分かれています。この関数を 1 度呼び出すたびに、1 つのレベルの情報を取得できます。各レベルは 16 ビットの情報に制限されています。これは、1 文字の情報を 16 ビットで表現するよう制限された他のマッピングルーチンも文字種情報を返すことができるようにするためです。
この関数がサポートする文字種情報には次のものがあります。
- Ctype 1
- ANSI C と POSIX(LC_CTYPE)の文字型指定関数をサポートします。dwInfoType パラメータに CT_CTYPE1 を指定すると、lpCharType パラメータが指す配列に次の定数を結合した値が格納されます。
| 定数名 | 値 | 意味 |
| C1_UPPER | 0x0001 | 大文字 |
| C1_LOWER | 0x0002 | 小文字 |
| C1_DIGIT | 0x0004 | 10 進数 |
| C1_SPACE | 0x0008 | スペース |
| C1_PUNCT | 0x0010 | 区切り記号 |
| C1_CNTRL | 0x0020 | 制御文字 |
| C1_BLANK | 0x0040 | 未定義文字 |
| C1_XDIGIT | 0x0080 | 16 進数 |
| C1_ALPHA | 0x0100 | 言語上のすべての文字(アルファベット、音節文字、表意文字) |
次の文字種は定数であるか、基本文字種から計算可能なため、この関数でサポートする必要はありません。
| 文字種 | 説明 |
| 英数字 | アルファベットと数字(C1_ALPHA と C1_DIGIT) |
| 印字可能文字 | グラフィック文字とブランク文字(C1_CNTRL を除くすべての C1_* 文字種) |
- Ctype 2
- Unicode テキストの正しい文字方向をサポートします。方向属性は、Unicode によって標準化されている左右文字方向アルゴリズムで正確な結果を得るように割り当てられます。次の文字種は相互に排他的です。定数を 2 つ以上同時に指定することはできません。これらの属性の詳細については、『The Unicode Standard: Worldwide Character Encoding, Volumes 1 and 2, Addison Wesley Publishing Company: 1991, 1992, ISBN 0201567881』を参照してください。
| 定数名 | 値 | 意味 |
| 強い文字種 | | |
| C2_LEFTTORIGHT | 0x0001 | 左から右 |
| C2_RIGHTTOLEFT | 0x0002 | 右から左 |
| 弱い文字種 | | |
| C2_EUROPENUMBER | 0x0003 | ヨーロッパの数字 |
| C2_EUROPESEPARATOR | 0x0004 | ヨーロッパの桁区切り記号 |
| C2_EUROPETERMINATOR | 0x0005 | ヨーロッパの数字終了記号 |
| C2_ARABICNUMBER | 0x0006 | アラビア数字 |
| C2_COMMONSEPARATOR | 0x0007 | 共通桁区切り記号 |
| 中間文字種 | | |
| C2_BLOCKSEPARATOR | 0x0008 | ブロック区切り記号 |
| C2_SEGMENTSEPARATOR | 0x0009 | セグメント区切り記号 |
| C2_WHITESPACE | 0x000A | 空白 |
| C2_OTHERNEUTRAL | 0x000B | その他の中間文字種 |
| 適用されない文字種 | | |
| C2_NOTAPPLICABLE | 0x0000 | 暗黙的な方向性のない文字(制御コードなど) |
- Ctype 3
- 一般的なテキスト処理または標準 C ライブラリ関数に必要な POSIX 型への拡張のプレースホルダとして使われます。これらの文字種は、Windows NT の現在のバージョンでサポートされます。dwInfoType パラメータに CT_CTYPE3 を指定すると、次の定数を結合した値が返ります。
| 定数名 | 値 | 意味 |
| C3_NONSPACING | 0x0001 | 非スペース符号 |
| C3_DIACRITIC | 0x0002 | 分音符 |
| C3_VOWELMARK | 0x0004 | 母音字 |
| C3_SYMBOL | 0x0008 | シンボル文字 |
| C3_KATAKANA | 0x0010 | カタカナ |
| C3_HIRAGANA | 0x0020 | ひらがな |
| C3_HALFWIDTH | 0x0040 | 全角文字 |
| C3_FULLWIDTH | 0x0080 | 半角文字 |
| C3_IDEOGRAPH | 0x0100 | 表意文字 |
| C3_KASHIDA | 0x0200 | アラビックカシダ文字 |
| C3_LEXICAL | 0x0400 | 単語の一部と見なされる区切り記号(カシダ、ハイフン、女性/男性オーディナル、等号、その他) |
| C3_ALPHA | 0x8000 | 言語学上のすべての文字(アルファベット、音節文字、表意文字) |
| 適用されない文字種 | | |
| C3_NOTAPPLICABLE | 0x0000 | 適用されない文字 |
Windows CE:GetStringTypeEx 関数は、Locale パラメータを無視する Unicode 版のみがサポートされます。
対応情報
Windows NT/2000:Windows NT 3.5 以降
Windows 95/98:Windows 95 以降
ヘッダー:winnls.h 内で宣言
インポートライブラリ:kernel32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装
参照
、GetStringTypeA、GetStringTypeW