4

Im trying to convert arguments LPWSTR to LPTSTR, it there any library I can user for easy string convertion?

4

2 回答 2

7

如果_UNICODE已定义,则无需转换 - aTCHAR 是 a WCHAR,并且LPWSTRLPTSTR; 否则,TCHAR是 a CHAR,并且LPTSTRLPSTR。在最后一种情况下,您可以使用WideCharToMultiByte API 将一个LPWSTR(即 Unicode 字符串)转换为“窄”字符串。

此外,您可以使用wcstombsC 库函数,假设 Windows 类型CHARWCHAR映射到 C 类型charwchar_t(在 VC++ 中肯定是这种情况),并且当前 C 语言环境是您打算用于转换的语言环境。


另请参阅Alf的评论以了解有关此问题的更多见解-最重要的一点是,如果可以的话,您应该避免这种转换,因为您的输出编码通常不能忠实地表示输入,并且根据您的字符串所代表的内容,这可能意味着乱码文本以及找不到所需的文件,或者更糟糕的是,在错误的路径上操作。

因此,将您的项目设置为使用 Unicode(如@prazuber的回答)并始终尝试使用支持 Unicode 的 API,以避免这种转换。

不过,请记住,仅使用 Unicode 版本的 Windows API 可能意味着失去与 Windows 9x 的兼容性;这对于绝大多数情况来说都不是问题,但是如果在您的应用程序中支持此类操作系统至关重要,请检查您使用的 API 是否在MSLU中受支持。

于 2012-12-16T16:58:59.427 回答
2

LPTSTR 定义如下:

#ifdef UNICODE
 typedef LPWSTR LPTSTR;
#else
 typedef LPSTR LPTSTR;
#endif

因此,您需要做的就是将字符集切换为 Unicode。例如,在 Visual Studio 中,您转到Configuration Properties -> General -> Character Set -> Use Unicode Character Set

于 2012-12-16T16:51:57.497 回答