getStringScripts 函数 (winnls.h)

提供指定 Unicode 字符串中使用的脚本列表。

语法

int GetStringScripts(
  [in]            DWORD   dwFlags,
  [in]            LPCWSTR lpString,
  [in]            int     cchString,
  [out, optional] LPWSTR  lpScripts,
  [in]            int     cchScripts
);

参数

[in] dwFlags

指定脚本检索选项的标志。

含义
GSS_ALLOW_INHERITED_COMMON
检索“Qaii” (INHERITED) 和“Zyyy” (COMMON) 脚本信息。 此标志不会影响未分配字符的处理。 输入字符串中的这些字符始终会导致“Zzzz” (UNASSIGNED 脚本) 出现在脚本字符串中。
 
注意 默认情况下, GetStringScripts 将忽略 lpString 指示的输入字符串中的任何继承字符或常用字符。 如果未设置 GSS_ALLOW_INHERITED_COMMON,则脚本字符串中不会显示“Qaii”和“Zyyy”,即使输入字符串包含此类字符也是如此。 如果设置了GSS_ALLOW_INHERITED_COMMON,并且输入字符串包含继承的和/或通用字符,则脚本字符串中分别显示“Qaii”和/或“Zyyy”。 请参阅“备注”部分。
 

[in] lpString

指向要分析的 Unicode 字符串的指针。

[in] cchString

lpString 指示的 Unicode 字符串的大小(以字符为单位)。 如果 Unicode 字符串以 null 结尾,则应用程序将此参数设置为 -1。 如果应用程序将此参数设置为 0,则该函数将在 lpScripts 中检索 null Unicode 字符串 (L“\0”) 并返回 1。

[out, optional] lpScripts

指向缓冲区的指针,在此缓冲区中,此函数使用 ISO 15924 中使用的 4 个字符表示法检索表示脚本列表的以 null 结尾的字符串。 每个脚本名称由四个拉丁字符组成,并按字母顺序检索名称。 每个名称(包括最后一个)后跟分号。

或者,如果 cchScripts 设置为 0,则此参数包含 NULL。 在这种情况下,函数返回脚本缓冲区所需的大小。

[in] cchScripts

lpScripts 指示的脚本缓冲区的大小(以字符为单位)。

或者,应用程序可以将此参数设置为 0。 在这种情况下,函数在 lpScript 中检索 NULL,并返回脚本缓冲区所需的大小。

返回值

如果成功且 cchScripts 设置为非零值,则返回在输出缓冲区中检索到的字符数,包括终止 null 字符。 函数返回 1,指示未找到任何脚本,例如,当输入字符串仅包含 COMMON 或 INHERITED 字符且未设置GSS_ALLOW_INHERITED_COMMON时。 假设每个找到的脚本 (4 个字符加上 5 个字符 + 分隔符) ,则简单的数学运算会将脚本计数设置为 (return_code - 1) / 5。

如果函数成功,并且 cchScripts 的 值为 0,则该函数将返回脚本缓冲区所需的大小(以字符为单位,包括终止 null 字符)。 脚本计数如上所述。

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

  • ERROR_BADDB。 函数无法访问数据。 这种情况通常不应发生,通常表示安装错误、磁盘问题或类似情况。
  • ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL
  • ERROR_INVALID_FLAGS。 为标志提供的值无效。
  • ERROR_INVALID_PARAMETER。 任何参数值都无效。

注解

此函数是缓解与国际化域名相关的安全问题的策略的一部分, (IDN)

脚本确定基于 Unicode 联盟在 中 http://www.unicode.org/Public/4.1.0/ucd/Scripts.txt发布的脚本值,不同之处在于,未分配字符的值是“Zzzz” (UNASSIGNED) 而不是“Zyyy” (COMMON) 。

下面是此函数行为的一些示例:

输入字符串 dwFlags lpScripts 脚本
Microsoft.com 0 兰特; 拉丁语
Microsoft.com GSS_ALLOW_INHERITED_COMMON 兰特;Zyyy; 拉丁语 + 通用
现象 004E 0069 0241 006F GSS_ALLOW_INHERITED_COMMON 兰特; 拉丁语
使用带 TILDE 的拉丁文小写字母 N
现象 004E 0069 006E 0303 006F GSS_ALLOW_INHERITED_COMMON 兰特;Qaii; 拉丁语 + 继承
使用 COMBINING TILDE
Spооf 0053 0070 043e 043e 0066 0 兰特;Cyrl; 拉丁文 + 西里尔文
使用西里尔文小写字母 O
U+f000 0 Zzzz; 未分配
U+f000 GSS_ALLOW_INHERITED_COMMON Zzzz; 未分配

要求

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

另请参阅

DownlevelGetStringScripts

处理国际化域名 (IDN)

国家语言支持

国家语言支持函数

VerifyScripts