你应该如何在 VC++ 中使用 unicode 字符串?当然你应该#define UNICODE,但是你的字符串呢?
应该在所有文本周围使用 TEXT() 或 _T() 宏,还是应该在字符串前面放一个 L?我认为现在所有程序都应该使用 unicode,所以使用 L 前缀不是最干净的吗?
意见?
你应该如何在 VC++ 中使用 unicode 字符串?当然你应该#define UNICODE,但是你的字符串呢?
应该在所有文本周围使用 TEXT() 或 _T() 宏,还是应该在字符串前面放一个 L?我认为现在所有程序都应该使用 unicode,所以使用 L 前缀不是最干净的吗?
意见?
这取决于您想要达到的目标。如果您想确保您的代码在使用和不使用 Unicode 的情况下都能正确编译和工作,请使用TEXT
or_T
宏,并调用“默认”Win32 函数名称(例如CreateWindow
)。
如果您想确保您的程序始终使用 Unicode API,那么您应该L
在字符串前面使用前缀,并调用 Win32 函数的宽版本(例如CreateWindowW
)。
在后一种情况下,无论是否UNICODE
定义,您都将获得 unicode 行为。在前一种情况下,您的应用程序将根据是否UNICODE
定义来改变其行为。
我同意你的观点,自 Win98 以来非 unicode 版本并没有真正相关,所以我会采用第二种方法。
不久前我学到的东西:
做框架设计要做的事情——如果你使用 Windows,使用_T
, 使你的代码独立于字符类型。如果您使用的是 Linux,请使用 UTF-8。如果你有一个跨平台的框架,不管它做什么。但是,除非您有充分的理由,否则不要尝试发明自己的东西。(通常不值得针对框架工作。)
L
用前缀声明 Unicode 字符串文字。
TEXT()
or宏适用于您希望单一源代码同时编译 Unicode 和非 Unicode 版本的 Windows (Windows 9x)的_T()
糟糕日子。幸运的是,您今天可以放心地忽略 Windows 9x。