C ++:将char *转换为wstring

时间:2014-06-11 15:27:16

标签: 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 ++人来说是微不足道的,但搜索它只会带来很多噪音。

2 个答案:

答案 0 :(得分:1)

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

  1. 正如Maxim所写:mbstowcs()

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

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

  4. 对于Windows:

    1. WINAPI中的MultiByteToWideChar()

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

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

      现在这一切都浮现在脑海中: - )

答案 1 :(得分:0)

在UNIX / Linux上使用iconv

在Windows上使用mbstowcs

还有一个standard C++ mbstowcs,但它的界面有点缺乏。