getStringTypeW 函数 (stringapiset.h)

检索指定 Unicode 源字符串中字符的字符类型信息。 对于字符串中的每个字符, 函数在输出数组的相应 16 位元素中设置一个或多个位。 每个位标识给定字符类型,例如字母、数字或两者均不。

谨慎 错误地使用 GetStringTypeW 函数可能会损害应用程序的安全性。 若要避免缓冲区溢出,应用程序必须正确设置输出缓冲区大小。 有关更多安全信息,请参阅 安全注意事项:Windows 用户界面

 

语法

BOOL GetStringTypeW(
  [in]  DWORD                         dwInfoType,
  [in]  _In_NLS_string_(cchSrc)LPCWCH lpSrcStr,
  [in]  int                           cchSrc,
  [out] LPWORD                        lpCharType
);

参数

[in] dwInfoType

指定要检索的字符类型信息的标志。 此参数可以具有以下值。 如“备注”部分所述,字符类型分为不同的级别。

标志 含义
CT_CTYPE1
检索字符类型信息。
CT_CTYPE2
检索双向布局信息。
CT_CTYPE3
检索文本处理信息。

[in] lpSrcStr

指向要为其检索字符类型的 Unicode 字符串的指针。 如果 cchSrc 设置为任何负值,则假定字符串以 null 结尾。

[in] cchSrc

lpSrcStr 指示的字符串的大小(以字符为单位)。 如果大小包含终止 null 字符,则该函数将检索该字符的字符类型信息。 如果应用程序将大小设置为任何负整数,则假定源字符串以 null 结尾,并且函数会自动计算大小,并为 null 终止添加一个字符。

[out] lpCharType

指向 16 位值数组的指针。 此数组的长度必须足够大,以便为源字符串中的每个字符接收一个 16 位值。 如果 cchSrc 不是负数, 则 lpCharType 应该是包含 cchSrc 元素的单词数组。 如果 cchSrc 设置为负数, 则 lpCharType 是包含 lpSrcStr + 1 个元素的单词数组。 当函数返回时,此数组包含一个对应于源字符串中每个字符的单词。

返回值

如果成功,则返回非零值,否则返回 0。 若要获取扩展的错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:

  • ERROR_INVALID_FLAGS。 为标志提供的值无效。
  • ERROR_INVALID_PARAMETER。 任何参数值都无效。

注解

有关字符串函数用法的概述,请参阅 字符串

lpSrcStrlpCharType 参数的值不能相同。 如果它们相同,则函数将失败并ERROR_INVALID_PARAMETER。

此函数不使用相应 GetStringTypeA 函数使用的 Locale 参数。 由于参数差异,应用程序无法使用 #define UNICODE 开关自动调用 GetStringType* 函数的正确 ANSI 或 Unicode 版本。 应用程序可以使用推荐的函数 GetStringTypeEx 来规避此限制。

支持的字符类型

字符类型位分为多个级别。 一个级别的信息可以通过对此函数的单个调用来检索。 每个级别限制为 16 位信息,因此其他映射函数(每个字符的表示形式限制为 16 位)也可以返回字符类型信息。

Ctype 1

这些类型支持 ANSI C 和 POSIX (LC_CTYPE) 字符键入函数。 当 dwInfoType 设置为 CT_CTYPE1 时,输出缓冲区的数组中检索这些值的按位 OR。 对于 DBCS 区域设置,类型属性同时应用于窄字符和宽字符。 日语平假名和片假名字符以及汉字象形字字符都具有C1_ALPHA属性。

名称 含义
C1_UPPER 0x0001 大写
C1_LOWER 0x0002 小写
C1_DIGIT 0x0004 十进制数字
C1_SPACE 0x0008 空格字符
C1_PUNCT 0x0010 标点
C1_CNTRL 0x0020 控制字符
C1_BLANK 0x0040 空字符
C1_XDIGIT 0x0080 十六进制数字
C1_ALPHA 0x0100 任何语言字符:字母、音节或象形字
C1_DEFINED 0x0200 已定义的字符,但不是其他C1_* 类型之一
 

以下字符类型是常量或基本类型中可计算的,不需要受此函数支持。

类型 说明
字母数字 字母字符和数字 (C1_ALPHA 和C1_DIGIT)
可打印 图形字符和空白 (除C1_CNTRL) 之外的所有C1_* 类型
 

Ctype 2

这些类型支持 Unicode 文本的正确布局。 对于 DBCS 区域设置,字符类型适用于窄字符和宽字符。 分配方向属性,以便 Unicode 标准化的双向布局算法生成准确的结果。 这些类型是互斥的。 有关使用这些属性的详细信息,请参阅 Unicode Standard

名称 含义
C2_LEFTTORIGHT 0x0001 从左到右
C2_RIGHTTOLEFT 0x0002 从右到左
weak
C2_EUROPENUMBER 0x0003 欧洲数字,欧洲数字
C2_EUROPESEPARATOR 0x0004 欧洲数字分隔符
C2_EUROPETERMINATOR 0x0005 欧洲数字终止符
C2_ARABICNUMBER 0x0006 阿拉伯文数字
C2_COMMONSEPARATOR 0x0007 通用数字分隔符
中立
C2_BLOCKSEPARATOR 0x0008 块分隔符
C2_SEGMENTSEPARATOR 0x0009 段分隔符
C2_WHITESPACE 0x000A 空格
C2_OTHERNEUTRAL 0x000B 其他中性
不适用
C2_NOTAPPLICABLE 0x0000 没有隐式方向性 (例如,控制代码)
 

Ctype 3

这些类型旨在用作一般文本处理或标准 C 库函数所需的 POSIX 类型的扩展的占位符。 当 dwInfoType 设置为 CT_CTYPE3 时,将检索这些值的按位 OR。 对于 DBCS 区域设置,Ctype 3 属性同时适用于窄字符和宽字符。 日本平假名和片假名字符以及汉字象形字字符都具有C3_ALPHA属性。

名称 含义
C3_NONSPACING 0x0001 非步调标记
C3_DIACRITIC 0x0002 音调非节奏标记
C3_VOWELMARK 0x0004 元音非节奏标记
C3_SYMBOL 0x0008 符号
C3_KATAKANA 0x0010 片假名字符
C3_HIRAGANA 0x0020 平假名字符
C3_HALFWIDTH 0x0040 半角 (窄) 字符
C3_FULLWIDTH 0x0080 全角 (宽) 字符
C3_IDEOGRAPH 0x0100 象形字符
C3_KASHIDA 0x0200 阿拉伯语 kashida 字符
C3_LEXICAL 0x0400 标点,它被计为单词的一部分, (kashida,连字符,女性/男性的序号指标,等号,等等)
C3_ALPHA 0x8000 所有语言字符 (字母、音节和象形)
C3_HIGHSURROGATE 0x0800 Windows Vista: 高代理项代码单元
C3_LOWSURROGATE 0x1000 Windows Vista: 低代理项代码单元
不适用
C3_NOTAPPLICABLE 0x0000 不适用
 

C3_HIGHSURROGATE和C3_LOWSURROGATE仅出于完整性而列出,绝不应提供给此函数。 它们仅与 Unicode 相关。

从 Windows 8 开始:GetStringTypeW 在 Stringapiset.h 中声明。 在Windows 8之前,它在 Winnls.h 中声明。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 stringapiset.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

GetStringTypeA

GetStringTypeEx

国家语言支持

国家语言支持函数