c++ - 在 Windows 上存储语言环境名称的缓冲区大小应该是多少?
问题描述
我想将附加的语言环境名称和代码页存储在缓冲区中,缓冲区的理想大小应该是多少?
来自 winnt.h
// Maximum Locale Name Length in Windows
// Locale names are preferred to the deprecated LCID/LANGID concepts.
//
// Locale names should follow the BCP47 recommendations and typically
// include language, script, regional variant, and perhaps additional specifiers.
// BCP47 allows some variation, eg: en-US is preferred to en-Latn-US.
#define LOCALE_NAME_MAX_LENGTH 85
正如我们所见,LOCALE_NAME_MAX_LENGTH 是没有代码页的区域名称,例如:“en-US”,但我想存储“en-US.1252”、“English_United States.1252”等。
代码页允许的标准最大长度是多少?
其实我想做以下事情。我正在使用 128 个宽字符的数组,我想知道相同的最佳大小是多少?
size_t buffer_size;
wchar_t wc_locale_name[128];
wchar_t buffer[128];
wchar_t wc_full_locale_name[128];
buffer_size = _countof(buffer);
wmemset(wc_locale_name, 0, buffer_size);
wmemset(buffer, 0, buffer_size);
wmemset(strbuf, 0, buffer_size);
MultiByteToWideChar(CP_ACP, 0, "en-US", len, wc_locale_name,
LOCALE_NAME_MAX_LENGTH);
if (GetLocaleInfoEx(wc_locale_name, LOCALE_SENGLISHLANGUAGENAME, buffer,
buffer_size))
{
len = swprintf(wc_full_locale_name, buffer_size, L"%ls", buffer);
wmemset(buffer, 0, buffer_size);
if (GetLocaleInfoEx(wc_locale_name, LOCALE_SENGLISHCOUNTRYNAME,
buffer, buffer_size))
{
len += swprintf(wc_full_locale_name + len, buffer_size - len, L"_%ls",
buffer);
wmemset(buffer, 0, buffer_size);
if (GetLocaleInfoEx(wc_locale_name, LOCALE_IDEFAULTANSICODEPAGE,
buffer, buffer_size))
{
len = swprintf(wc_full_locale_name + len, buffer_size - len, L".%ls",
buffer);
}
}
}
解决方案
推荐阅读
- angular - 从 Firestore 加载 Firebase 内容的 Angular 材料表批次
- vulkan - VkDescriptorSet 越界动态 UBO
- react-native - 错误 react-native-video:未定义不是对象(评估“RCTVideoInstance.Constants”)
- java - 数据库正在连接但未检索数据
- mariadb - 仅 Python mysql.connector 替换为 mariaDB 的兼容 api
- tfs - TFS API中参数的长度限制?
- openshift - Openshift new-app 不适用于 dockerfile
- mysql - 将mysql选择非聚合转换为mssql
- amazon-web-services - 源域名为 S3 存储桶时的 CloudFront InvalidArgument
- excel - 使用 selenium 在弹出窗口中向下滚动