Windows 似乎至少跟踪“当前语言环境”的四个维度: http ://www.siao2.com/2005/02/01/364707.aspx
- 默认用户区域
- 默认系统语言环境
- 默认用户界面语言
- 默认输入语言环境
我只是想跟踪四个不同的语言环境到底有什么用处,我的大脑很痛……
但是,我不了解代码页和语言环境(或LCID
,或语言 ID)之间的关系,所有这些似乎都不同(例如,日语(日本)是 LANGID = 0x411 位置代码 1,但日本的代码页是932)。
在 Unicode 和窄字符串之间转换时,如何配置我们的应用程序以使用用户所需的语言作为默认 MBCS 目标?
也就是说,我们曾经是一个MBCS应用。然后我们切换到Unicode。事情在英语中运行良好,但在亚洲语言中失败,显然是因为 Windows 转换功能WideCharToMultiByte
并MultiByteToWideChar
采用显式代码页(不是区域设置 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,它将自动恢复为系统默认值)。