当我在C或C ++中包含#include <windows.h>
,我不得不决定字符的格式,其中TCHAR
等于char
或wchar_t
。
我已经看了很多,就像这个或这样的网站这样的post指出, wchar_t
事情很久以前就出现在UTF8之前,由于各种原因,它不是一个非常好的Unicode解决scheme在现代编程中。 然而,这些没有说明已经在wchar_t
运行的现有系统的支持。
所以我的问题是,我应该使用哪一个? 如果我使用普通的旧char
将来会被MS放弃,因为在这一天结束的时候,API的wchar_t
版本更新了吗? 或者如果我使用wchar_t
,是否会让我的代码在其他现代平台上运行,而后来在UTF8中使用普通的老char
开发是一种痛苦?
这是正确处理任意路径名称(因为它们被允许包含宽字符)的绝对有用和唯一的方法。 UTF-16的选择经常受到批评(有充分的理由),但这是无关紧要的。 操作系统使用它,所以你也必须使用它。 你所能做的最好的是总是调用WINAPI函数的宽字符版本(例如OpenFileW
),并在你的程序内部使用UTF-8。 是的,这意味着来回转换,但通常不是性能瓶颈。
我强烈建议UTF-8宣言解释为什么客观这是最好的方法。
可移植性,跨平台互操作性和简单性比现有平台API的互操作性更重要。 所以,最好的方法是在任何地方使用UTF-8窄字符串,并在使用不支持UTF-8的平台API并接受宽字符串(例如Windows API)时来回转换它们。 在处理字符串接受系统API(例如UI代码和文件系统API)时,性能很少是任何相关性的问题,并且在应用程序的其他地方使用相同的编码有很大的好处,所以我们没有足够的理由否则。