wchar_t对Windows API有用了吗?

时间:2016-06-02 13:15:15

标签: c++ c windows winapi unicode

当我在C或C ++中#include <windows.h>时,我被迫决定字符的格式,其中TCHAR等于charwchar_t

我已经看了很多,就像this one这样的帖子或像this这样的网站指出wchar_t之前很久以前就发生过UTF8并且,由于各种原因,在现代编程中并不是特别好的Unicode解决方案。但是,这些对于已在wchar_t中运行的现有系统的支持一无所知。

所以我的问题是,我应该使用哪一个? 如果我使用普通的char将来会被MS放弃,因为在一天结束时,API的wchar_t版本会更新? 或者,如果我使用wchar_t,那么让我的代码在其他现代平台上运行会很麻烦,后者在UTF8中使用普通的char进行开发吗?

1 个答案:

答案 0 :(得分:7)

它绝对有用,是正确处理任意路径名的唯一方法(因为它们可以包含宽字符)。 UTF-16的选择经常被批评(有充分的理由),但这是无关紧要的。操作系统使用它,所以你也必须使用它。您可以做的最好是始终调用WINAPI函数的宽字符版本(例如OpenFileW)并在程序内部使用UTF-8。是的,这意味着来回转换,但这通常不是性能瓶颈。

我强烈推荐UTF-8 Manifesto,这解释了为什么客观地说这是最好的方法。

  

可移植性,跨平台互操作性和简单性更多   比与现有平台API的互操作性重要。所以   最好的方法是到处使用UTF-8窄字符串并进行转换   当使用不支持UTF-8的平台API时,它们来回传递   并接受宽字符串(例如Windows API)。表现很少   处理字符串接受系统API时的任何相关性问题   (例如UI代码和文件系统API),并且有很大的优势   在应用程序中的其他地方使用相同的编码,所以我们看到   没有充分的理由不这样做。