Im trying to convert arguments LPWSTR to LPTSTR, it there any library I can user for easy string convertion?
2 回答
如果_UNICODE
已定义,则无需转换 - aTCHAR
是 a WCHAR
,并且LPWSTR
是LPTSTR
; 否则,TCHAR
是 a CHAR
,并且LPTSTR
是LPSTR
。在最后一种情况下,您可以使用WideCharToMultiByte API 将一个LPWSTR
(即 Unicode 字符串)转换为“窄”字符串。
此外,您可以使用wcstombs
C 库函数,假设 Windows 类型CHAR
并WCHAR
映射到 C 类型char
和wchar_t
(在 VC++ 中肯定是这种情况),并且当前 C 语言环境是您打算用于转换的语言环境。
另请参阅Alf的评论以了解有关此问题的更多见解-最重要的一点是,如果可以的话,您应该避免这种转换,因为您的输出编码通常不能忠实地表示输入,并且根据您的字符串所代表的内容,这可能意味着乱码文本以及找不到所需的文件,或者更糟糕的是,在错误的路径上操作。
因此,将您的项目设置为使用 Unicode(如@prazuber的回答)并始终尝试使用支持 Unicode 的 API,以避免这种转换。
不过,请记住,仅使用 Unicode 版本的 Windows API 可能意味着失去与 Windows 9x 的兼容性;这对于绝大多数情况来说都不是问题,但是如果在您的应用程序中支持此类操作系统至关重要,请检查您使用的 API 是否在MSLU中受支持。
LPTSTR 定义如下:
#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
#endif
因此,您需要做的就是将字符集切换为 Unicode。例如,在 Visual Studio 中,您转到Configuration Properties -> General -> Character Set -> Use Unicode Character Set。