IsTextUnicode

【勇芳软件工作室】汉化HomePreviousNext

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测试,尽管失败将更为可取。