如何将wchar_t **转换为char **?

时间:2010-07-12 09:31:15

标签: c++ char wchar-t

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

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

3 个答案:

答案 0 :(得分:4)

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

  1. 使用std :: locale和std :: codecvt<>面;
  2. 使用C语言环境函数,如std :: mbstowcs();
  3. 使用* nix上的iconv()或Windows上的WideCharToMultiByte()等第三方功能。
  4. 你真的需要进行转换吗?

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

答案 1 :(得分:1)

这就是诀窍:

#define MAXLEN 512
   char tx[MAXLEN];
   mbstowcs(argv[i], tx, MAXLEN);

答案 2 :(得分:0)

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