我应该从Windows代码中删除TCHAR吗?

vy3*_*y32 8 c unicode winapi utf-8 tchar

我正在修改一些非常古老的(10年)C代码.该代码在Unix/Mac上使用GCC进行编译,并使用MinGW对Windows进行交叉编译.目前整个都有TCHAR字符串.我想摆脱TCHAR并使用C++字符串代替.是否仍然需要使用Windows范围的功能,或者我现在可以使用Unicode和UTF-8完成所有操作吗?

Dav*_*nan 9

Windows仍然使用UTF16,而且很可能总是如此.你需要使用wstring而不是string因此.Windows API不直接提供对UTF8的支持,主要是因为Windows在UTF8发明之前支持Unicode.

因此编写将在Windows和Unix平台上编译的Unicode代码是相当痛苦的.

  • @ben你们都在这里混淆了.这些功能很好.字符数正是分配缓冲区所需的.如果函数使用了多个代码点,那将只是一个问题.他们没有. (4认同)
  • 字符数表示wchars的数量.问题是如果函数返回了代码点的数量.但他们没有. (3认同)
  • @ben Character是一个加载的术语.但MS的意思是TCHAR. (3认同)
  • Windows使用了'UCS-2`和`UTF-16`的可怕混合.使用BMP之外的字符有点蠢蠢欲动. (2认同)
  • @David:从字符到代码点有1:1的映射(反之则不然,一些代码点不是字符).在UTF-8的情况下,字符的编码可能需要多个`char`,或者在UTF-8的情况下需要多个`wchar_t`.假设一个字符是一个`wchar_t`适用于(1)32位`wchar_t`,这在Windows上不是这种情况,或者(2)UCS-2.这是使用*character*这个词在Unicode文献中使用的方式.当MS使用不同的词时,它们会造成可怕的混乱,这只适用于UCS-2. (2认同)
  • `wstring`可以在任何有C++的地方使用,因为它在标准库中,但它在UNIX上没用,因为UNIX是UTF-8 (2认同)