GetLocaleInfoA 函数 (winnls.h)

检索有关标识符指定的区域设置的信息。

注意 出于互操作性原因,应用程序应首选 GetLocaleInfoEx 函数来 GetLocaleInfo,因为Microsoft正迁移到使用区域设置名称而不是新区域设置的区域设置标识符。 仅在 Windows Vista 及更高版本上运行的任何应用程序都应使用 GetLocaleInfoEx
注意 为了全局兼容性,应用程序应将 Unicode“W”API 窗体首选为“A”窗体。 GetLocaleInfoA 将限制字符数据,并可能导致用户出现损坏的结果,尤其是在启用了全局的应用程序中。 对于此 API,GetLocaleInfoEx 是首选,因为它是 Unicode,还支持新式区域设置名称标准。
 

语法

int GetLocaleInfoA(
  [in]            LCID   Locale,
  [in]            LCTYPE LCType,
  [out, optional] LPSTR  lpLCData,
  [in]            int    cchData
);

参数

[in] Locale

要为其检索信息的区域设置标识符。 可以使用 MAKELCID 宏创建区域设置标识符或使用以下预定义值之一。

[in] LCType

要检索的区域设置信息。 有关详细定义,请参阅 GetLocaleInfoExLCType 参数。

注意 对于 GetLocaleInfo,值LOCALE_USE_CP_ACP仅与 ANSI 版本相关。
 

[out, optional] lpLCData

指向此函数检索所请求的区域设置信息的缓冲区的指针。 如果 cchData 设置为 0,则不会使用此指针。 有关详细信息,请参阅“备注”部分。

[in] cchData

lpLCData指示的数据缓冲区的大小(以 TCHAR 为单位)。 或者,应用程序可以将此参数设置为 0。 在这种情况下,该函数不使用 lpLCData 参数并返回所需的缓冲区大小,包括终止 null 字符。

返回值

如果成功且 cchData 为非零值,则返回区域设置数据缓冲区中检索的字符数。 如果函数成功,cchData 为非零,并且指定 LOCALE_RETURN_NUMBER,则返回值是数据缓冲区中检索的整数的大小;即 2 表示函数的 Unicode 版本,对于 ANSI 版本为 4。 如果函数成功,并且 cchData 的值为 0,则返回值是区域设置数据缓冲区的必需大小(包括 null 字符)。

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

  • ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL
  • ERROR_INVALID_FLAGS。 为标志提供的值无效。
  • ERROR_INVALID_PARAMETER。 任何参数值都无效。

言论

有关此函数的操作,请参阅 GetLocaleInfoEx的备注。

注释 即使将 LCType 参数指定为 LOCALE_FONTSIGNATURE,cchData,函数返回仍为 TCHAR 计数。 ANSI 和 Unicode 版本的函数计数不同。 当应用程序使用 LOCALE_FONTSIGNATURE 调用 GetLocaleInfo 的泛型版本时,cchData 可以安全地指定为 sizeof(LOCALESIGNATURE) / sizeof(TCHAR)。
 
以下示例正确处理非文本值的缓冲区大小:
int   ret;
CALID calid;
DWORD value;

ret = GetLocaleInfo(LOCALE_USER_DEFAULT,
                    LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER,
                    (LPTSTR)&value,
                    sizeof(value) / sizeof(TCHAR) );
calid = value;

LOCALESIGNATURE LocSig;

ret = GetLocaleInfo(LOCALE_USER_DEFAULT,
                    LOCALE_FONTSIGNATURE,
                    (LPWSTR)&LocSig,
                    sizeof(LocSig) / sizeof(TCHAR) );

此函数的 ANSI 版本检索的 ANSI 字符串将基于区域设置标识符的默认 ANSI 代码页从 Unicode 转换为 ANSI。 但是,如果指定了 LOCALE_USE_CP_ACP,则转换基于系统默认的 ANSI 代码页。

当此函数的 ANSI 版本与仅 Unicode 区域设置标识符一起使用时,该函数可能会成功,因为操作系统使用系统代码页。 但是,系统代码页中未定义的字符在字符串中显示为问号(?)。

注意

winnls.h 标头将 GetLocaleInfo 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

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

另请参阅

GetLocaleInfoEx

GetSystemDefaultLCID

GetUserDefaultLCID

国家语言支持

国家语言支持函数

检索和设置区域设置信息

SetLocaleInfo