LCMapStringEx 函数 (winnls.h)
对于由名称指定的区域设置,使用指定的转换将输入字符串映射到另一个,或者为输入字符串生成排序键。
语法
int LCMapStringEx(
[in, optional] LPCWSTR lpLocaleName,
[in] DWORD dwMapFlags,
[in] LPCWSTR lpSrcStr,
[in] int cchSrc,
[out, optional] LPWSTR lpDestStr,
[in] int cchDest,
[in, optional] LPNLSVERSIONINFO lpVersionInformation,
[in, optional] LPVOID lpReserved,
[in, optional] LPARAM sortHandle
);
参数
[in, optional] lpLocaleName
指向 区域设置名称或以下预定义值之一的指针。
[in] dwMapFlags
指定在字符串映射期间使用的转换类型或要生成的排序键类型的标志。 此参数可以具有以下值。
标志 | 含义 |
---|---|
LCMAP_BYTEREV | 使用字节反转。 例如,如果应用程序传入0x3450 0x4822,则结果为0x5034 0x2248。 |
LCMAP_FULLWIDTH | 如果适用,请使用 Unicode (宽) 字符。 此标志和LCMAP_HALFWIDTH是互斥的。 使用此标志时,即使输入字符已经是全角字符,映射也可以使用规范化形式 C。 例如,将字符串“は゛”(已是全角)规范化为“ば”。 请参阅 Unicode 范式。 |
LCMAP_HALFWIDTH | 在适用的情况下使用窄字符。 此标志和LCMAP_FULLWIDTH互斥。 |
LCMAP_HIRAGANA | 将所有片假名字符映射到平假名。 此标志和LCMAP_KATAKANA是互斥的。 |
LCMAP_KATAKANA | 将所有平假名字符映射到片假名。 此标志和LCMAP_HIRAGANA是互斥的。 |
LCMAP_LINGUISTIC_CASING | 使用语言规则进行大小写,而不是文件系统规则 (默认) 。 此标志仅对 LCMAP_LOWERCASE 或 LCMAP_UPPERCASE 有效。 |
LCMAP_LOWERCASE | 对于能够处理大写和小写的区域设置和脚本,请将所有字符映射到小写。 |
LCMAP_HASH | 返回字符串的原始排序权重的哈希。 看起来等效的字符串通常返回相同的哈希 (例如,“hello”和“HELLO”与LCMAP_IGNORECASE) 。 但是,某些复杂情况(如东亚语言)可以具有具有相同权重的类似字符串,这些字符串比较为相等,但不返回相同的哈希。 LCMAP_HASH要求输出缓冲区的大小为 (int) |
LCMAP_SIMPLIFIED_CHINESE | 将繁体中文映射到简体中文字符。 此标志和LCMAP_TRADITIONAL_CHINESE是互斥的。 |
LCMAP_SORTHANDLE 使用排序句柄可最大程度地提高性能,不建议这样做。 |
返回表示区域设置 (解析排序参数(如区域设置名称) )的标记,以便将来的调用可以传递 NULL 排序名称,并将以前查询的排序句柄作为最后一个参数 (sortHandle) 在对 CompareStringEx 或 LCMapStringEx 的后续调用中传递。LCMAP_SORTHANDLE要求输出缓冲区的大小为 (lparam) |
LCMAP_SORTKEY | 生成规范化排序键。 如果未指定LCMAP_SORTKEY标志,函数将执行字符串映射。 有关排序键生成和字符串映射的详细信息,请参阅备注部分。 |
LCMAP_TITLECASE | Windows 7: 将所有字符映射到标题大写,其中每个主要单词的第一个字母都大写。 |
LCMAP_TRADITIONAL_CHINESE | 将简体中文字符映射到繁体中文。 此标志和LCMAP_SIMPLIFIED_CHINESE是互斥的。 |
LCMAP_UPPERCASE | 对于能够处理大写和小写的区域设置和脚本,将所有字符映射到大写。 |
以下标志可以单独使用,可以相互使用,也可以与LCMAP_SORTKEY和/或LCMAP_BYTEREV标志一起使用。 但是,它们不能与上面列出的其他标志组合使用。
下面列出的标志仅与 LCMAP_SORTKEY 标志一起使用。
[in] lpSrcStr
指向函数映射或用于排序键生成的源字符串的指针。 此字符串的大小不能为 0。
[in] cchSrc
lpSrcStr 指示的源字符串的大小(以字符为单位)。 源字符串的大小可以包含终止 null 字符,但不必这样做。 如果包含终止 null 字符,则函数的映射行为不会受到很大影响,因为终止 null 字符被视为不可排序且始终映射到自身。
应用程序可以将此参数设置为任何负值,以指定源字符串以 null 结尾。 在这种情况下,如果 LCMapStringEx 在其字符串映射模式下使用,则该函数将计算字符串本身的长度,并为 null 终止 lpDestStr 指示的映射字符串。
应用程序无法将此参数设置为 0。
[out, optional] lpDestStr
指向缓冲区的指针,此函数在其中检索映射的字符串或排序键。
如果应用程序使用 函数生成排序键 (LCMAP_SORTKEY) :
- 排序键存储在缓冲区中,并被视为不透明的字节数组。 存储的值可以包含任何位置的嵌入 0 个字节。
- 目标字符串可以包含奇数字节。 LCMAP_BYTEREV标志仅反转偶数个字节。 排序键中最后一个字节 (奇位) 不会反转。
如果调用方显式请求字符串的子集,则目标字符串不包含终止 null 字符,除非调用方在 cchDest 中指定了该字符。
如果此函数失败,则目标缓冲区可能包含部分结果或根本没有结果。 在这种情况下,所有结果都应被视为无效。
注意
设置LCMAP_UPPERCASE或LCMAP_LOWERCASE时,目标字符串可以使用与源字符串相同的缓冲区。 但是,强烈建议不要这样做,因为某些条件可能会导致返回的大小写字符串的长度不同。
[in] cchDest
lpDestStr 指示的目标字符串的大小(以字符为单位)。 如果应用程序使用 函数进行字符串映射,它将提供此参数的字符计数。 如果 cchSrc 中包含终止 null 字符的空间, 则 cchDest 还必须包含终止 null 字符的空间。
如果应用程序使用 函数来生成排序键,它将提供大小的字节计数。 此字节计数必须包含排序键0x00终止符的空间。
应用程序可以将 cchDest 设置为 0。 在这种情况下,函数不使用 lpDestStr 参数,并返回映射字符串或排序键所需的缓冲区大小。
[in, optional] lpVersionInformation
指向包含相关 NLS 功能的版本信息的 NLSVERSIONINFOEX 结构的指针;通常从 GetNLSVersionEx 检索。
Windows Vista、Windows 7: 保留;必须设置为 NULL。
[in, optional] lpReserved
保留;必须为 NULL。
[in, optional] sortHandle
保留;必须为 0。
注意
如果区域设置名称为 null ) ,CompareStringEx 和 LCMapStringEx 可以指定排序句柄 (。 对于大多数应用,不建议使用此用法。
返回值
如果函数在用于字符串映射时成功,它将返回转换的字符串中的字符数 (有关) 更多详细信息,请参阅 cchSrc 和 cchDest 。
如果函数在用于生成排序键时成功,它将返回排序键中的字节数。
如果此函数不成功,则返回 0。 若要获取扩展错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:
- ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL。
- ERROR_INVALID_FLAGS。 为标志提供的值无效。
- ERROR_INVALID_PARAMETER。 任何参数值都无效。
注解
应用程序可以使用 LCMapString 或 LCMapStringEx 生成排序键。 为此,应用程序为 dwMapFlags 参数指定LCMAP_SORTKEY。 有关详细信息,请参阅 处理应用程序中的排序。
注意
排序键是不透明的字节流。 调用方应将它们视为 API 返回的长度的字节数组,而不依赖于任何可能看起来存在的内部结构。 零,返回的排序键中的一个或多个字节可以为 0。 不应期望不存在或存在零字节。
应用程序使用 LCMapString 或 LCMapStringEx 的另一种方法是映射字符串。 在这种情况下,应用程序不会为 dwMapFlags 参数指定LCMAP_SORTKEY,而是提供标志的其他一些组合。 有关详细信息,请参阅 处理应用程序中的排序。
从 Windows Vista 开始: 此函数可以处理 来自自定义区域设置的数据。 不保证数据在计算机之间或应用程序运行之间的数据相同。 如果应用程序必须保留或传输数据,请参阅 使用永久性区域设置数据。
从Windows 8开始:如果你的应用将语言标记从 Windows.Globalization 命名空间传递到此函数,它必须首先通过调用 ResolveLocaleName 来转换标记。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | winnls.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |