C++:将 char * 转换为 wstring

标签 c++ string utf-8 wstring

argv[] 中的参数是 UTF-8 编码的。我想做类似的事情:

#include <wstring>
#include <???>

void doWhatever(wstring &ws);

using ???;

int main(int argc, char *argv[])
{
    while (--argc)
    {
        // Convert argv to wstring
        wstring ws = ???(argv[argc]);
        doWhatever(ws);
    }
    return EXIT_SUCCESS;
}

??? 我不知道。我敢肯定这对于 C++ 用户来说是微不足道的,但搜索它只会带来很多噪音。

最佳答案

这是一个很好的问题! :-)

  1. 正如 Maxim 所写:mbstowcs()

  2. 带有“%S”(大写“S”)的 wsprintf()。在 wsprintf() 中,“S”表示多字节字符串(在 sprintf() 中,“S”表示宽字符)。

  3. 您可以使用 std::wstring_convert 并选择 UTF-8 编码。我认为它是“codecvt_utf8_utf16”

对于窗口:

  1. WINAPI 中的 MultiByteToWideChar()

  2. 如果您使用 SetClipboardData() 将 ASCII 文本设置为剪贴板,Windows 允许您使用 CF_UNICODETEXT 的 GetClipboardData() 为您进行转换!

您也可以通过在 2 个 ASCII 字符之间添加“NULL”来手动执行此操作(并且仅在某些情况下有效)。

现在想到的就是这些:-)

关于C++:将 char * 转换为 wstring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24166841/

相关文章:

java - 分割字符串会出现越界异常

json - 在不使用结构的情况下将 json 转换为 map slice 并将 map slice 转换为 json

c++ - 在 C++11 中缺少 std::u8string

javascript - 如何在不切割单词的情况下将句子拆分为具有最大字符数的句子数组?

C++ 字符编码 UTF-8

java - 速度模板似乎无法使用 UTF-8

c++ - IO重定向: cout not working in main

c++ - Fstream 正在耗尽我的生命

c++ - 如何在类中将 lambda 捕获为参数来存储它?

c++ - 如何读取DIO口?