c++ - 如何将 wchar_t** 转换为 char**?

标签 c++ char wchar-t

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

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

最佳答案

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

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

您真的需要进行转换吗?

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

关于c++ - 如何将 wchar_t** 转换为 char**?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227270/

相关文章:

c++ - 字符串分词器失败

c++ - 如何使用 C++ 中的代码通知 DNS 地址更改?

c++ - 在非阻塞套接字中选择函数

C: 声明一个指向常量字符数组的常量指针

c - 将 wscanf 用于 UTF-8 时不要忽略空格

c++ - 如何一次打印带有空格的整个 wchar_t? (c++)

c++ - 了解有符号与无符号比较

java - Java NIO中ByteBuffer和CharBuffer有什么区别?

string - 如何在 Haskell 中通过列表理解正确生成字符串列表?

c++ - C++工作草案的措辞可能有缺陷(整数转换等级规则)