当我在C或C ++中#include <windows.h>
时,我被迫决定字符的格式,其中TCHAR
等于char
或wchar_t
。
我已经看了很多,就像this one这样的帖子或像this这样的网站指出wchar_t
之前很久以前就发生过UTF8并且,由于各种原因,在现代编程中并不是特别好的Unicode解决方案。但是,这些对于已在wchar_t
中运行的现有系统的支持一无所知。
所以我的问题是,我应该使用哪一个?
如果我使用普通的char
将来会被MS放弃,因为在一天结束时,API的wchar_t
版本会更新?
或者,如果我使用wchar_t
,那么让我的代码在其他现代平台上运行会很麻烦,后者在UTF8中使用普通的char
进行开发吗?
答案 0 :(得分:7)
它绝对有用,是正确处理任意路径名的唯一方法(因为它们可以包含宽字符)。 UTF-16的选择经常被批评(有充分的理由),但这是无关紧要的。操作系统使用它,所以你也必须使用它。您可以做的最好是始终调用WINAPI函数的宽字符版本(例如OpenFileW
)并在程序内部使用UTF-8。是的,这意味着来回转换,但这通常不是性能瓶颈。
我强烈推荐UTF-8 Manifesto,这解释了为什么客观地说这是最好的方法。
可移植性,跨平台互操作性和简单性更多 比与现有平台API的互操作性重要。所以 最好的方法是到处使用UTF-8窄字符串并进行转换 当使用不支持UTF-8的平台API时,它们来回传递 并接受宽字符串(例如Windows API)。表现很少 处理字符串接受系统API时的任何相关性问题 (例如UI代码和文件系统API),并且有很大的优势 在应用程序中的其他地方使用相同的编码,所以我们看到 没有充分的理由不这样做。