【问题标题】:Is there an official TCHAR type in C++ now?现在 C++ 中有官方的 TCHAR 类型吗?
【发布时间】:2015-11-27 17:04:22
【问题描述】:

如果编写的代码可以用不同的字符类型编译,TCHAR 仍然是正确的类型,例如std::basic_stringstream<TCHAR>

或者现在有一些官方的 C++/STL 类型是首选的,比如wchar_t 替换 WCHARtrue 替换 TRUEnullptr 替换 NULL

我说的是使用 basic_string 之类的类的情况,这些类使用 TCHAR 显式模板化。

【问题讨论】:

  • 没有。我认为 wchar_t 是无稽之谈(因此 TCHAR,既可以是 char 也可以是 wchar_t,也是无稽之谈)。尽可能使用 utf8
  • 您能说明一下您的用例吗?您是否提前知道要流式传输的内容是否为空终止?可变宽度?嵌入空值的固定宽度?
  • @rubicks 我不是这方面的专家,我的编辑是否澄清了一点?
  • If writing code which may be compiled with different character types 为什么?几乎没有理由再在 Windows/Linux/Mac 上编写兼容 unicode 的程序了。
  • @Mr.Boy 将 TCHAR 视为最好的弃用和最坏的有害。另外,请考虑将您的 unicode 操作委托给 libicu (site.icu-project.org) 或类似的。

标签: c++ c++11 character-encoding tchar


【解决方案1】:

没有。 TCHAR 允许您基于 Microsoft 的 _UNICODE 宏并使用 Microsoft 的各种其他“T”宏在 charwchar_t 之间切换。这些都与标准 C++ API 无关。

如果您正在维护使用 TCHAR 的旧版 C++ 程序,那么您可以继续使用 TCHAR。

对于编写新程序,我见过人们更喜欢完全避免使用旧代码页,而是使用 char 作为 UTF-8,然后在 Windows 上无条件使用 *W API,在 UTF-8 之间转换API 边界处的char 字符串和wchar_t

【讨论】:

  • "then on Windows to use the *W APIs to unconditionally,在 UTF-8 char 字符串和 API 边界处的 wchar_t 之间转换是什么意思。" 是什么意思?
  • @UnrealEngine5ComingSoon 表示直接使用以 W 结尾的 API,无需根据 UNICODE 预处理器定义在 W 和 A 版本之间切换的宏。因此,您无需使用宏 SetWindowText,而是使用函数 SetWindowTextW,并且您要设置的文本最初是使用 UTF-8 编码的 char 字符串,在您需要传递该文本之前立即将其转换为 wchar_t到功能。 Windows 已经开始支持 UTF-8 作为活动代码页,因此您可以改为确保已设置,使用 A 函数,并直接传递 UTF-8 数据。
  • 非常感谢。
猜你喜欢
  • 2019-02-16
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 2016-07-25
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多