代码之家  ›  专栏  ›  技术社区  ›  Narek

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

  •  4
  • Narek  · 技术社区  · 15 年前

    我得到argv作为wchar_T**(见下文),因为我需要使用unicode,但我需要将其转换为char**。我该怎么做?

    int wmain(int argc, wchar_t** argv) 
    { 
    
    3 回复  |  直到 15 年前
        1
  •  4
  •   wilx    15 年前

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

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

    你真的需要转换吗?

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

        2
  •  1
  •   RED SOFT ADAIR    15 年前

    这就是诀窍:

    #define MAXLEN 512
       char tx[MAXLEN];
       mbstowcs(argv[i], tx, MAXLEN);
    
        3
  •  0
  •   m_pGladiator    15 年前

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