getStringTypeW 函数 (stringapiset.h)
检索指定 Unicode 源字符串中字符的字符类型信息。 对于字符串中的每个字符, 函数在输出数组的相应 16 位元素中设置一个或多个位。 每个位标识给定字符类型,例如字母、数字或两者均不。
语法
BOOL GetStringTypeW(
[in] DWORD dwInfoType,
[in] _In_NLS_string_(cchSrc)LPCWCH lpSrcStr,
[in] int cchSrc,
[out] LPWORD lpCharType
);
参数
[in] dwInfoType
指定要检索的字符类型信息的标志。 此参数可以具有以下值。 如“备注”部分所述,字符类型分为不同的级别。
标志 | 含义 |
---|---|
|
检索字符类型信息。 |
|
检索双向布局信息。 |
|
检索文本处理信息。 |
[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。 任何参数值都无效。
注解
有关字符串函数用法的概述,请参阅 字符串。
lpSrcStr 和 lpCharType 参数的值不能相同。 如果它们相同,则函数将失败并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 |