<Return[I]><Top>

IsTextUnicode

Declare Function Api_IsTextUnicode& Lib "advapi32" Alias "IsTextUnicode" (lpBuffer As Any, ByVal cb&, lpi&)

Declare Function IsTextUnicode Lib "advapi32" Alias "IsTextUnicode" (lpBuffer As Any, ByVal cb As Long, lpi As Long) As Long

Unicode テキストの形式がバッファに含まれている可能性が高いかどうか判定する。lpi パラメータでセットするフラグによって、判定のために実施する各種の統計的、決定論的なテストを指定する。関数が制御を戻すと、判定結果が lpi を介して報告される。指定したすべてのテストにパスした場合は、0 以外の値が返る。それ以外の場合は、0 が返る。

パラメータ
lpBuffer
    調査対象の入力バッファへのポインタを指定する。
cb
    lpBuffer パラメータが指す入力バッファのサイズを、バイト単位で指定する。
lpi
    入力バッファのテキストに対して実施するテストを指定する一連のフラグが入った int へのポインタを指定する。関数から制御が戻ると、指定

    したテストの結果を示す一連のビットフラグが格納される。対応するビットが、バッファの内容がテストにパスした場合は 1、パスしなかった場

    合は 0 に設定される。判定結果として有効なのは、関数に渡すときにセットしたビットだけである。
    このパラメータに NULL を指定すると、適用可能なすべてのテストを実施することによって、バッファ内のデータが Unicode テキストである可

    能性が高いかどうか判定される。
    *lpi のビットフラグとして、次の定数を使う。

    定数                                                                 

意味                                                                                                       

    IS_TEXT_UNICODE_ASCII16

Unicode テキストで、0 拡張 ASCII 値/文字以外は含まれていないかどうかテストする。

    IS_TEXT_UNICODE_REVERSE_ASCII16

 

IS_TEXT_UNICODE_ASCII16 と同じであるが、バイト順序反転 Unicode テキストかどうかテストする。

    IS_TEXT_UNICODE_STATISTICS

 

Unicode テキストかどうか統計的分析によってテストする。このテストにパスしても、Unicode テキストである絶対的な保証はない。

    IS_TEXT_UNICODE_REVERSE_STATISTICS

 

IS_TEXT_UNICODE_STATISTICS と同じであるが、バイト順序反転 Unicode テキストかどうかテストする。

    IS_TEXT_UNICODE_CONTROLS

 

RETURN、LINEFEED、SPACE、CJK_SPACE、TAB の 5 つの印字不可能な文字のうち、1つ以上の Unicode 表現がテキストに含まれているかどうかテストする。

    IS_TEXT_UNICODE_REVERSE_CONTROLS

 

IS_TEXT_UNICODE_CONTROLS と同じであるが、該当するバイト順序反転 Unicode 表現が含まれているかどうかテストする。

    IS_TEXT_UNICODE_BUFFER_TOO_SMALL

 

バッファ内の文字数が少なくて(2 バイト未満)、意味のある分析ができないかどうかテストする。

    IS_TEXT_UNICODE_SIGNATURE

 

 

先頭の文字が Unicode バイト順序マーク(BOM)の 0xFEFF かどうかテストする。
IS_TEXT_UNICODE_REVERSE_SIGNATURE 先頭の文字が Unicode バイト順序反転バイト順序マーク(順序反転 BOM)の 0xFFFE かどうかテストする。

    IS_TEXT_UNICODE_REVERSE_SIGNATURE

 

先頭の文字が Unicode バイト順序反転バイト順序マーク(順序反転 BOM)の 0xFFFE かどうかテストする。

    IS_TEXT_UNICODE_ILLEGAL_CHARS

 

 

埋め込み順序反転 BOM、UNICODE_NUL、CRLF(1つの WORD にパックされたもの)、0xFFFF のいずれかの Unicode 不当文字が含まれていないかどうかテストする。

    IS_TEXT_UNICODE_ODD_LENGTH

 

文字列の文字数が奇数かどうかテストする。文字数が奇数の文字列は(定義により)Unicode テキストになり得ない。

    IS_TEXT_UNICODE_NULL_BYTES

NULL バイトが含まれているかどうかテストする。これは非 ASCII テキストを示する。

    IS_TEXT_UNICODE_UNICODE_MASK

 

 

このフラグ定数は、IS_TEXT_UNICODE_ASCII16、IS_TEXT_UNICODE_STATISTICS、IS_TEXT_UNICODE_CONTROLS、IS_TEXT_UNICODE_SIGNATURE を結合したものである。

    IS_TEXT_UNICODE_REVERSE_MASK

 

 

 

このフラグ定数は、IS_TEXT_UNICODE_REVERSE_ASCII16、IS_TEXT_UNICODE_REVERSE_STATISTICS、IS_TEXT_UNICODE_REVERSE_CONTROLS、IS_TEXT_UNICODE_REVERSE_SIGNATURE を結合したものである。

    IS_TEXT_UNICODE_NOT_UNICODE_MASK

 

 

このフラグ定数は、IS_TEXT_UNICODE_ILLEGAL_CHARS、IS_TEXT_UNICODE_ODD_LENGTH と、現在未使用の2つのビットフラグを結合したものである。

    IS_TEXT_UNICODE_NOT_ASCII_MASK

 

このフラグ定数は、IS_TEXT_UNICODE_NULL_BYTES と現在未使用の3つのビットフラグを結合したものである。


戻り値
    バッファ内のデータが指定したテストにパスすると、0 以外の値が返る。
    バッファ内のデータが指定したテストにパスしないと、0 が返る。
    どちらの場合も、lpi パラメータが指す int に、判定に使った個々のテスト結果が格納される。

解説
    上の表で示すように、IS_TEXT_UNICODE_STATISTICS をセットした場合と IS_TEXT_UNICODE_REVERSE_STATISTICS をセット

    した場合は、統計的分析が行われる。この2つのテストは絶対的確実性を持っていない。統計的なテストでは、文字列の上位バイトと下

    位バイトの間である程度の変動を想定しているため、ASCII 文字列が ASCII 文字列として認識されないことがある。たとえば、lpBuffer

    が ASCII 文字列 0x41、0x0A、0x0D、0x1D (A\n\r^Z)を指している場合、この文字列は IS_TEXT_UNICODE_STATISTICS テスト

    にパスしないことが望ましいのであるが、実際はパスしてしまう。