【发布时间】:2010-11-22 02:40:59
【问题描述】:
我在 Visual Studio 2008 中有一个 VC++ 项目。
它在编译器命令行 (/D "_UNICODE" /D "UNICODE") 上定义 unicode 的符号,即使我没有在项目的预处理器部分打开此符号。
因此,我针对所有 Win32 库函数的 Unicode 版本进行编译,而不是 ANSI 版本。例如在 WinBase.h 中,有:
#ifdef UNICODE
#define CreateFile CreateFileW
#else
#define CreateFile CreateFileA
#endif // !UNICODE
VC++项目中的unicode在哪里开启,如何关闭?
【问题讨论】:
-
现在真正的问题是:为什么——看在上帝的份上——你会希望从禁用 UNICODE 支持中获得什么?这一定是我第一次看到有人在进入故障模式时寻求帮助。
-
如果您有遗留代码需要支持?例如,从 15 年前开始,我们有一堆可互换使用 char/TCHAR 的库。
-
@ThomasEding:在 Windows 上,
wchar_t是 Unicode/UTF-16LE 编码的同义词。糟糕与否,它是 Windows 中的本机字符编码,通过 Windows API 公开。如果你想与它互动,你最好学会欣赏它。顺便说一句,.NET 字符串也使用 UTF-16 编码。 NTFS 也是如此。或 Java 字符串。 -
在使用 C++ 时,我将使用 C++ UTF-8 库,谢谢。现在我的代码也可以在 Linux 上运行。奇迹!
-
您可以随心所欲地使用 C++ UTF-8 库,但您仍然必须将这些 UTF-8 字符串转换为 UTF-16 字符串才能与平台的原生 API 交互。因此,定义
UNICODE有助于确保您不会弄错并意外地将 UTF-8 字符串(键入为char)传递给期望 ANSI 字符串(也键入为char,非常不同)的 API 函数来自 UTF-8)。请注意,与某些程序员的期望相反,UTF-8 不是 Windows 上的有效 ANSI 代码页。 @托马斯
标签: visual-studio unicode visual-c++