标题: IsTextUnicode函数
作者: Demon
链接: https://demon.tw/copy-paste/istextunicode.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
对于需要打开文本文件并进行处理的大多数应用程序(比如编译器)而言,如果应用程序能够在打开一个文件之后,分辨此文件包含的是ANSI字符,还是Unicode字符,将是多么惬意而方便啊!由AdvApi32.dll导出、在WinBase.h中声明的IsTextUnicode函数有助于进行这种分辨:
BOOL IsTextUnicode(CONST PVOID pvBuffer, int cb, PINT pResult);
文本文件的问题在于,它们的内容没有任何硬性的、可供快速判断的规则。所以,要判断文件中包含的是ANSI字符还是Unicode字符,就显得相当困难。IsTextUnicode函数使用一系列统计和决策方法来猜测缓冲区中的内容。由于这并非一种精确的科学,IsTextUnicode函数可能会返回错误的结果。
它的第一个参数是pvBuffer,标识了要测试的缓冲区的地址。此数据是一个void指针,因为还不知道即将面对的是一组ANSI字符还是Unicode字符。
第二个参数是cb,它指定pvBuffer指向的缓冲区的字节数。同样地,由于不知道缓冲区中是什么,所以cb是一个字节数而不是字符数。注意,你不必指定整个缓冲区的长度。当然,IsTextUnicode函数测试的字节数越多,结果越精确。
第三个参数是pResult,这是一个整数的地址,在调用IsTextUnicode函数之前,必须初始化这个整数。在这个整数的初始值中,应指出希望IsTextUnicode执行哪些测试。也可以为此参数转入NULL,在这种情况下,IsTextUnicode函数将执行它能执行的每一项测试(详情参阅PlatformSDK文档)。
如果IsTextUnicode函数认为缓冲区包含的是Unicode文本,就会返回TRUE;反之返回FALSE。在pResult参数指向的整数中,如果指定了具体的测试项目,那么函数在返回之前,还会设置此整数中的位,以反映每个测试项目的结果。
摘自《Windows核心编程》
赞赏微信赞赏支付宝赞赏
随机文章: