IsTextUnicode函数确定缓冲区是否可能包含一种Unicode文本形式。该函数使用各种统计和确定性方法,在通过【LPI】传递的标志的控制下进行确定。当函数返回时,这些测试的结果通过【LPI】报告。如果所有指定的测试都被传递,函数返回TRUE;否则返回FALSE。
DWORD IsTextUnicode(
CONST LPVOID 【lpBuffer】, | //指向要检查的输入缓冲区的指针 |
INT【cb】, | //输入缓冲区的大小(以字节为单位) |
LPINT【LPI】 | //指向条件文本检查和接收结果的标志的指针 |
); |
参数
【lpBuffer】
指向要检查的输入缓冲区。
【cb】
指定【lpBuffer】指向的输入缓冲区的大小(以字节为单位)。
【LPI】
指向【】 INT的指针,即在输入函数时,包含一组指定要应用于输入缓冲区文本的测试的标志。退出功能后,相同的INT包含一组位标志,指示指定测试的结果:1如果缓冲区的内容通过测试,则为0表示失败。退出时只有在进入功能时设置的标志才是重要的。
如果【LPI】为NULL,则该函数使用所有可用的测试来确定缓冲区中的数据是否可能是Unicode文本。
以下是【* LPI】的位标志使用的常量:
值 | 含义 |
IS_TEXT_UNICODE_ASCII16 | 文本是Unicode,只包含零扩展ASCII值/字符。 |
IS_TEXT_UNICODE_REVERSE_ASCII16 | 与前述相同,只是Unicode文本是字节反转的。 |
IS_TEXT_UNICODE_STATISTICS | 文本大概是Unicode,通过应用统计分析作出决定。绝对的确定性不能保证。请参阅以下备注部分中的注释。 |
IS_TEXT_UNICODE_REVERSE_STATISTICS | 与上述相同,除了大概的Unicode文本是字节反转的。 |
IS_TEXT_UNICODE_CONTROLS | 文本包含一个或多个非打印字符的Unicode表示形式:RETURN,LINEFEED,SPACE,CJK_SPACE,TAB。 |
IS_TEXT_UNICODE_REVERSE_CONTROLS | 与上述相同,只是Unicode字符是字节反转的。 |
IS_TEXT_UNICODE_BUFFER_TOO_SMALL | 缓冲区中有少量字符用于有意义的分析(少于两个字节)。 |
IS_TEXT_UNICODE_SIGNATURE | 该文本包含Unicode字节顺序标记(BOM)0xFEFF作为其第一个字符。 |
IS_TEXT_UNICODE_REVERSE_SIGNATURE | 该文本包含Unicode字节反转字节顺序标记(反向BOM)0xFFFE作为其第一个字符。 |
IS_TEXT_UNICODE_ILLEGAL_CHARS | 该文本包含其中一个Unicode非法字符:嵌入式反向BOM,UNICODE_NUL,CRLF(打包成一个WORD)或0xFFFF。 |
IS_TEXT_UNICODE_ODD_LENGTH | 字符串中的字符数是奇数。一个奇数长度的字符串(根据定义)不能是Unicode文本。 |
IS_TEXT_UNICODE_NULL_BYTES | 该文本包含空字节,表示非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和两个当前未使用的位标志的组合。 |
IS_TEXT_UNICODE_NOT_ASCII_MASK | 该标志常量是IS_TEXT_UNICODE_NULL_BYTES和三个当前未使用的位标志的组合。 |
返回值
如果缓冲区中的数据通过指定的测试,该函数将返回非零值。
如果缓冲区中的数据未通过指定的测试,该函数将返回零。
在这两种情况下,INT指出的INT包含了应用于确定功能的特定测试的结果。
备注
如标记常量上表所示,IS_TEXT_UNICODE_STATISTICS和IS_TEXT_UNICODE_REVERSE_STATISTICS测试使用统计分析。这些测试不是万无一失的。统计测试假定字符串中低字节和高字节之间存在一定量的变化,一些ASCII字符串可能会滑过。例如,如果【lpBuffer】指向ASCII字符串0x41,0x0A,0x0D,0x1D(A \\ n \\ r ^ Z),则字符串将通过IS_TEXT_UNICODE_STATISTICS测试,尽管失败将更为可取。