IsTextUnicode函数

标签: ,

对于需要打开文本文件并进行处理的大多数应用程序(比如编译器)而言,如果应用程序能够在打开一个文件之后,分辨此文件包含的是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核心编程》

赞赏

微信赞赏支付宝赞赏

随机文章:

  1. VB6拾遗:LSet语句和RSet语句
  2. VBS转EXE工具:xNeat Application Builder
  3. SDK编程中的窗口居中
  4. 开机弹出脚本错误对话框
  5. VBS中的Microsoft.CmdLib对象

留下回复