gpt4 book ai didi

c++ - 我可以从语言首选项中获取代码页吗?

转载 作者:可可西里 更新时间:2023-11-01 11:32:10 24 4
gpt4 key购买 nike

Windows 似乎至少跟踪“当前语言环境”的四个维度: http://www.siao2.com/2005/02/01/364707.aspx

  • 默认用户区域设置
  • 默认系统区域设置
  • 默认用户界面语言
  • 默认输入区域

我的大脑很痛,只是试图跟踪四个不同的语言环境到底有什么用......

但是,我没有理解代码页和语言环境(或 LCID,或语言 ID)之间的关系,所有这些似乎都不一样(例如日语(日本)是 LANGID = 0x411位置代码 1,但日本的代码页是 932)。

在 Unicode 和窄字符串之间转换时,如何配置我们的应用程序以使用用户所需的语言作为默认 MBCS 目标?

也就是说,我们以前是一个MBCS应用。然后我们切换到 Unicode。事情在英语中运行良好,但在亚洲语言中失败,显然是因为 Windows 转换函数 WideCharToMultiByteMultiByteToWideChar 采用显式代码页(不是语言环境 ID 或语言 ID),这可以设置为 CP_ACP(默认为 ANSI 代码页),但似乎没有“默认为用户默认界面语言的代码页”的值。

我的意思是,这是一些非常复杂的废话。 “当前语言”的四个独立维度、三种不同的标识符类型,以及用于 C 库和 C++ 标准库的(不同的)字符串标识符。

在我们以前的 MBCS 构建中,磁盘 I/O 和用户 I/O 工作正常:一切都保留在默认系统区域(Windows XP 术语:“非 Unicode 程序的语言”)。但是现在,在我们的 UNICODE 构建中,所有内容都尝试使用“C”作为语言环境,并且文件 I/O 无法将 UNICODE 正确转码为用户的语言环境,反之亦然。

我们希望使用当前用户语言的代码页写出文本文件(当缩小时)。并且在读入时,当前用户语言的代码页应该转换回 UNICODE。

求助!!!

澄清:理想情况下,我希望使用 MUI 语言代码页而不是操作系统默认代码页。 GetACP() 返回系统默认代码页,但我不知道返回用户选择的 MUI 语言的函数(如果未指定/安装 MUI,它会自动恢复为系统默认值)。

最佳答案

我同意 Jon Trauntvein 的评论,GetACP 功能确实反射(reflect)了用户在控制面板中的语言设置。此外,根据您提供的“全部整理”博客的链接,默认用户界面语言是 Windows 用户界面将使用的语言,它与程序使用的语言不同。

但是,如果您真的想使用 DEFAULT USER INTERFACE LANGUAGE,则可以通过调用 GetUserDefaultUILanguage 获取它,然后您可以使用下表将语言 ID 映射到代码页。 Language Identifiers and Locales

您也可以使用 GetLocaleInfo 函数进行映射,但首先您必须将从 GetUserDefaultUILanguage 获得的语言 ID 转换为语言环境 ID,然后我想您会得到代码页的名称而不是数值,但您可以试试看。

关于c++ - 我可以从语言首选项中获取代码页吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18319869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com