你应该如何在VC ++中使用unicode字符串?当然你应该#define UNICODE,但你的字符串怎么样?
是否应在所有文本周围使用TEXT()或_T()宏,还是应该在字符串前放置一个L?我相信所有程序现在应该使用unicode,所以使用L前缀不是最干净吗?
评论
答案 0 :(得分:2)
这取决于你想要达到的目标。如果您想确保您的代码在使用和不使用Unicode时都能正常编译和使用,请使用TEXT
或_T
宏,并调用“默认”Win32函数名称(例如{{1} })。
如果您想确保您的程序始终使用Unicode API,那么您应该在字符串前面使用CreateWindow
前缀,并调用Win32函数的宽版本(例如L
)。
在后一种情况下,无论是否定义CreateWindowW
,您都将获得unicode行为。
在前一种情况下,您的应用程序将根据是否定义UNICODE
来更改其行为。
我同意你的观点,自从Win98以来,非unicode版本并没有真正相关,所以我选择了第二种方法。
答案 1 :(得分:1)
使用L
前缀声明Unicode字符串文字。
当您希望单个源代码编译为Unicode和非Unicode版本的Windows(Windows 9x)时,TEXT()
或_T()
宏是过去的糟糕时期。值得庆幸的是,您今天可以安全地忽略Windows 9x。
答案 2 :(得分:1)
我刚才学到的东西:
执行框架的目的 - 如果使用Windows,请使用_T
,使代码独立于字符类型。如果您使用的是Linux,请使用UTF-8。如果您有跨平台框架,请执行任何操作。但是,除非你有真正的理由,否则不要试图发明自己的东西。 (通常不值得努力反对框架。)