GetStringTypeW 函数 (stringapiset.h)

注意

对于某些 Unicode 字符(尤其是补充范围中的字符),此 API 可能具有不完整/过时的信息。 若要获取更准确和全面的 Unicode 字符类型信息,请考虑使用等效的 ICU API,例如 u_charTypeu_isloweru_isspaceu_ispunct。 有关在 Windows 上使用 ICU API 的指导,请参阅 Windows上的 ICU 入门。

检索指定 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 标准

名字 价值 意义
C2_LEFTTORIGHT 0x0001 从左到右
C2_RIGHTTOLEFT 0x0002 从右到左
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 Professional [桌面应用 |UWP 应用]
支持的最低服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 窗户
标头 stringapiset.h (包括 Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

GetStringTypeA

GetStringTypeEx

国家语言支持

国家语言支持函数