FoldStringW 関数 (stringapiset.h)

1 つの Unicode 文字列を別の Unicode 文字列にマップし、指定した変換を実行します。 文字列関数の使用方法の概要については、「 文字列」を参照してください。

注意FoldString を誤って使用すると、アプリケーションのセキュリティが損なわれる可能性があります。 正しくマップされていない文字列は、無効な入力を生成する可能性があります。 文字列をテストして、使用する前に有効であることを確認し、エラー ハンドラーを提供します。 詳細については、「 セキュリティに関する考慮事項: 国際機能」を参照してください。
 

構文

int FoldStringW(
  [in]            DWORD                         dwMapFlags,
  [in]            _In_NLS_string_(cchSrc)LPCWCH lpSrcStr,
  [in]            int                           cchSrc,
  [out, optional] LPWSTR                        lpDestStr,
  [in]            int                           cchDest
);

パラメーター

[in] dwMapFlags

文字列マッピング中に使用する変換の種類を指定するフラグ。 このパラメーターは、次の値と組み合わせて使用できます。

フラグ 説明
MAP_COMPOSITE
アクセント記号付き文字を分解文字にマップします。つまり、基本文字と 1 つ以上の非スペース文字がそれぞれ個別のコード ポイント値を持つ文字です。 たとえば、Ä は A + ̈: LATIN CAPITAL LETTER A (U+0041) + COMBINING DIAERESIS (U+0308) で表されます。 このフラグは、Windows Vista の正規化フォーム D と同じです。 このフラグは、MB_PRECOMPOSEDでは使用できないことに注意してください。
MAP_EXPAND_LIGATURES
すべての合字文字を展開して、2 文字の等価文字で表されるようにします。 たとえば、合字 "æ" (U+00e6) は 2 文字の "a" (U+0061) + "e" (U+0065) まで拡張されます。 この値をMAP_PRECOMPOSEDまたはMAP_COMPOSITEと組み合わせることはできません。
MAP_FOLDCZONE
互換性ゾーン文字を標準の Unicode と同等の文字に折りたたみます。 このフラグは、MAP_COMPOSITE フラグも設定されている場合、Windows Vista の正規化フォーム KD と同じです。 複合フラグが設定されていない場合 (既定値)、このフラグは、Windows Vista の正規化フォーム KC と同じです。
MAP_FOLDDIGITS
すべての数字を Unicode 文字 0 ~ 9 にマップします。
MAP_PRECOMPOSED
アクセント記号付き文字を事前計算済み文字にマップします。この文字は、アクセント記号と基本文字が 1 つの文字値に結合されます。 このフラグは、Windows Vista の正規化フォーム C と同じです。 この値をMAP_COMPOSITEと組み合わせることはできません。

[in] lpSrcStr

関数がマップするソース文字列へのポインター。

[in] cchSrc

lpSrcStr で示されるソース文字列のサイズ (文字単位)。終端の null 文字を除きます。 アプリケーションでは、 パラメーターを負の値に設定して、ソース文字列が null で終了することを指定できます。 この場合、関数は文字列の長さを自動的に計算し、 lpDestStr で示されるマップされた文字列を null で終了します。

[out, optional] lpDestStr

この関数がマップされた文字列を取得するバッファーへのポインター。

[in] cchDest

lpDestStr で示される宛先文字列のサイズ (文字数)。 終端の null 文字のスペースが cchSrc に含まれている場合、 cchDest には終端の null 文字のスペースも含める必要があります。

アプリケーションで cchDest を 0 に設定できます。 この場合、関数は lpDestStr パラメーターを使用せず、マップされた文字列に必要なバッファー サイズを返します。 MAP_FOLDDIGITS フラグを指定した場合、実際に必要な文字数が最大サイズより小さい場合でも、戻り値は必要な最大サイズになります。 最大サイズが渡されない場合、関数は ERROR_INSUFFICIENT_BUFFER で失敗します。

戻り値

成功した場合は、翻訳された文字列の文字数 (終端の null 文字を含む) を返します。 関数が成功し、 cchDest の値が 0 の場合、戻り値は、終端の null 文字を含む、翻訳された文字列を保持するために必要なバッファーのサイズです。

成功しなかった場合、この関数は 0 を返します。 拡張エラー情報を取得するために、アプリケーションは GetLastError を呼び出すことができます。このエラー コードは、次のいずれかのエラー コードを返すことができます。

  • ERROR_INSUFFICIENT_BUFFER。 指定されたバッファー サイズが十分な大きさではなかったか、 正しく NULL に設定されていません。
  • ERROR_INVALID_DATA。 データが無効です。
  • ERROR_INVALID_FLAGS。 フラグに指定された値が無効です。
  • ERROR_INVALID_PARAMETER。 パラメーター値のいずれかが無効です。
  • ERROR_MOD_NOT_FOUND。 モジュールが見つかりませんでした。
  • ERROR_OUTOFMEMORY。 この操作を完了するのに十分な記憶域が使用できませんでした。
  • ERROR_PROC_NOT_FOUND。 必要な手順が見つかりませんでした。

注釈

lpSrcStr パラメーターと lpDestStr パラメーターの値は同じにすることはできません。 同じ場合、関数は ERROR_INVALID_PARAMETER で失敗します。

Unicode の互換性ゾーンは、文字の他のエンコード標準の文字に割り当てられているが、実際には Unicode に既に存在する文字のバリアントである0xFFEFを介して0xF900範囲内の文字で構成されます。 互換性ゾーンは、これらの標準へのラウンドトリップ マッピングをサポートするために使用されます。 アプリケーションでは、互換性ゾーン内の文字の重複をサポートしないように、MAP_FOLDCZONE フラグを使用できます。

Windows Vista 以降: この関数では、Unicode 正規化がサポートされています。 すべての Unicode 互換性文字がマップされます。

Windows Vista 以降: MAP_FOLDCZONE、MAP_PRECOMPOSED、および MAP_COMPOSITE フラグによって示される変換では、Unicode 正規化形式 KC、C、D ( NormalizeString 関数を使用) を使用してマッピングを実行します。

Windows 8 以降: 関数の ANSI バージョンは Winnls.h で宣言され、Unicode バージョンは Stringapiset.h で宣言されています。 Windows 8より前は、両方のバージョンが Winnls.h で宣言されていました。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー stringapiset.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

各国語サポート

各国語サポート関数

NormalizeString

セキュリティに関する考慮事項: 国際機能

並べ替え

Unicode 正規化を使用して文字列を表す