4

我得到 argv 作为 wchar_t**(见下文),因为我需要使用 unicode,但我需要将其转换为 char **。我怎样才能做到这一点?

int wmain(int argc, wchar_t** argv) 
{ 
4

3 回答 3

4

有不止一种方法可以做到这一点。根据您的环境和可用的编译器/标准库/其他库,您至少有三个选择:

  1. 使用 std::locale 和 std::codecvt<> facet;
  2. 使用 C 语言环境函数,例如 std::mbstowcs();
  3. 使用第 3 方函数,如 *nix 上的 iconv() 或 Windows 上的 WideCharToMultiByte()。

你真的需要进行转换吗?

您应该意识到通常(尤其是在 Windows 上)从 wchar_t 字符串到 char 字符串的转换是有损转换。系统用于 char 字符串的字符集通常不是 UTF-8。例如,如果您将带有国家字符或某些亚洲语言的文件名转换为字符字符串,您很可能会得到一些无法真正用于访问原始文件的内容。

于 2010-07-12T11:08:55.783 回答
1

这可以解决问题:

#define MAXLEN 512
   char tx[MAXLEN];
   mbstowcs(argv[i], tx, MAXLEN);
于 2010-07-12T09:55:25.217 回答
0

为什么需要转换?在大多数情况下,您需要更改项目设置,因此所有内容都接受宽字符。如果第三方库需要非 Unicode 字符串,那么您需要使用适当的 Unicode 选项重新编译它。如果 Unicode 没有合适的选项,我会摆脱这个库并找到(编写)一个更好的库。

于 2010-07-14T09:03:00.750 回答