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

问题描述

| 我正在修改一些非常旧的(10年)C代码。该代码在带有GCC的Unix / Mac上编译,并在Windows上与MinGW的交叉编译中。当前整个都有TCHAR字符串。我想摆脱TCHAR并改用C ++字符串。是否仍然需要使用Windows范围的功能,还是现在可以使用Unicode和UTF-8进行所有操作?     

解决方法

        Windows仍将使用UTF16,并且极有可能一直使用。因此,您需要使用
wstring
而不是than1ѭ。 Windows API不直接提供对UTF8的支持,主要是因为在发明UTF8之前Windows支持Unicode。 因此,编写将在Windows和Unix平台上都可以编译的Unicode代码非常痛苦。     ,           是否仍然需要使用   Windows范围的功能,或者我可以做   现在使用Unicode和UTF-8进行所有操作? 是。不幸的是,Windows没有对UTF-8的本机支持。如果需要适当的Unicode支持,则需要使用Windows API函数的
wchar_t
版本,而不是
char
版本。   我应该从Windows代码中消除TCHAR吗? 是的你应该。存在“ 4”的原因是同时支持Windows的Unicode和非Unicode版本。早在2001年Windows 98仍很流行的时候,非Unicode支持就一直是一个主要的问题,但是今天还不流行。 而且,非Windows特定的库极不可能具有使same4ѭ可用的相同类型的
char
/
wchar_t
重载。 因此,继续将所有的ѭ4替换为ѭ2。   该代码在带有GCC的Unix / Mac上编译,并在Windows上与MinGW的交叉编译中。 我以前不得不编写跨平台的C ++代码。 (现在我的工作是编写跨平台的C#代码。)当Windows不支持UTF-8和Un * x不支持UTF-16时,字符编码会很痛苦。我最终使用UTF-8作为我们的主要编码,并根据需要在Windows上进行了转换。     ,        是的,如今编写非Unicode应用程序使您无所适从。只需在各处使用广泛的API,您以后就不必再哭了。如果您不需要平台之间的(网络)通信(或将带有Win32 API的wchar_t \转换为UTF-8),则仍可以在UNIX上使用UTF8,在Windows上使用wchar_t,也可以尝试使用UTF- 8随处可见,并在使用Win32 API函数时转换为wchar_t \(这就是我的工作)。     ,        要直接回答您的问题:   是否仍然需要使用Windows范围的功能,还是现在可以使用Unicode和UTF-8进行所有操作? 否,绝大多数Windows API函数均不接受(非ASCII)UTF-8。您仍然必须使用各种AP​​I。 类似地,可能会抱怨其他操作系统仍然不支持
wchar_t
。因此,您还必须支持UTF-8。 其他答案为如何在跨平台代码库中进行管理提供了一些很好的建议,但是听起来好像您已经具有支持不同字符类型的实现。为了简化代码,听起来很可取,但并非如此。     ,        而且我预测有一天,尽管可能不会在2020年之前,Windows将会添加UTF-8支持,只需添加所有API函数的U版本,A和W以及相同类型的链接程序即可。 8位A函数只是本机W(UTF-16)函数上的转换层。我敢打赌他们可以从A层半自动生成U层。 一旦对它们的“ 20世纪” Unicode支持进行了足够充分,足够长时间的梳理,... 通过使用精心选择的宏和默认的Visual Studio设置,它们仍将使编写变得笨拙,难以阅读且默认不可移植。