学习
实践
活动
专区
工具
TVP
写文章

解惑:关于Unicode字符串的一些名词解释

是否傻傻分不清楚?

在Win32编程中,我们经常会看到这么一些东西:TEXT vs. _TEXT vs. _T, and UNICODE vs. _UNICODE。

反正我是傻傻分不清楚,今天就来简单的说道说道。

首先的一个问题:为什么Windows要用不同的方式来描述同一件事儿(Unicode字符串)呢?

说道说道

这种设计背后,确实有它的一个成熟套路,下面请听我好好分解。

不带下划线的普通版本会影响Windows头文件中的默认字符集。因此,如果定义UNICODE,则GetWindowText将映射到GetWindowTextW而不是例如GetWindowTextA。

同样,TEXT宏将映射到L”…”而不是“…”。

带下划线的版本会影响C运行时头文件中的默认字符集。因此,例如,如果定义_UNICODE,则_tcslen将映射到wcslen而不是strlen。同样,_TEXT宏将映射到L”…”而不是“…”。

_T呢? 好吧,我不知道那一个。也许这玩意儿仅仅是为了节省码农的打字时间吧。

总结

我的经验是:总是拥抱Unicode版本,不管怎么样。

所以,我总是这样定义我的字符串L”HelloWorld”。但是对于API,我还是会调用通用版本,例如我会使用GetWindowText,而不是GetWindowTextW。

对于字符串操作,我也是调用通用版本,例如,我会使用_tcslen,而不是wcslen。

所以,你会看到,我还是尽量遵循微软老大哥的文档办事儿。

但是,不管如何,你需要了解这些名词背后的含义,才能融会贯通。

相对于modern language来说,C/C++真是…太难了。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《TEXT vs. _TEXT vs. _T, and UNICODE vs. _UNICODE》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201207A0GZHI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券