gpt4 book ai didi

c++ - 使 Win32 应用程序在 ANSI 和 UNICODE 上工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:19 30 4
gpt4 key购买 nike

我想让我的 Win32 C++ 应用程序能够在任何编码版本(UNICODE 和 ANSI)上播放。现在我对两种(或更多?)编码之间到底有什么区别感到有点困惑?

要使我的 Win32 应用程序交叉编码兼容是否意味着我必须检查我的代码并将每个 std::string 替换为 std::wstring,然后将每个字符替换为 wchar_t*然后将每个文字字符串 ("") 替换为 L""?

如果我的应用程序在 UNICODE 机器上运行并且我的应用程序中有一个 std::string 会怎样?

对于使我的应用程序交叉编码兼容需要采取的步骤,您有什么建议吗?例如:- 将所有 c_strings 和字符串更改为其等效的 UNICODE- 将任何 Win32 函数更改为 uncide 版本(例如,从 getenv() 更改为 _wgetenv())

最佳答案

如果我的应用程序在 UNICODE 机器上运行并且我的应用程序中有一个 std::string 会发生什么?

计算机不是ANSIUnicode,而是运行计算机的操作系统。上一个不支持 Unicode 的 Windows 版本是 Windows 3.11 for Workgroups。如果您在 UniCode 上运行 ASCII 编译的应用程序。

两种(或更多?)编码之间到底有什么区别?

什么是 ASCII?
ASCII 是一种七位编码技术,它为美国英语中最常用的 128 个字符中的每一个分配一个数字。这允许大多数计算机记录和显示基本文本。 ASCII 不包括在其他国家/地区常用的符号。

什么是 Unicode?
ASCII 的一大缺点是你只能有 256 个不同的字符。但是,日语和阿拉伯语等语言有数千个字符。因此 ASCII 在这些情况下不起作用。结果是 Unicode 允许多达 65,536 个不同的字符。

Unicode 是 ISO 和 Unicode Consortium 为电子文本开发一种编码系统的尝试,其中包括所有现有的书面字母。 Unicode 根据具体表示使用 8 位、16 位或 32 位字符,因此 Unicode 文档通常需要的磁盘空间是 ASCII 或 Latin-1 文档的两倍。 Unicode 的前 256 个字符与 Latin-1 相同。

在 Win32 中,通过 #define-ing UNICODE_UNICODE 宏支持 UNICODE。这反过来又会导致您的程序使用 Win32 函数的 Unicode 变体。

对于使我的应用程序交叉编码兼容需要采取的步骤,您有什么建议吗?

每个 Win32 函数(获取或返回字符串)都有两种变体,一种用于 ASCII,一种用于 Unicode。并且函数调用解析为其中之一,具体取决于是否定义了 UNICODE 宏。因此,您应该定义宏并开始使用函数的 Unicode 版本。例如:

将每个 std::string 替换为 std::wstring,
将每个 char 替换为 wchar_t*
将每个文字 string("") 替换为 L""
利用 Windows 等中的 TCHAR 支持。

正如您所指出的,这是您必须处理的事项列表,请注意,这不是完整列表。

基本上,您必须在代码中使用类型和函数调用的所有 Unicode 版本。

关于c++ - 使 Win32 应用程序在 ANSI 和 UNICODE 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6475799/

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