使用wstring和wcout并不能获得预期的输出

时间:2017-06-05 15:24:27

标签: c++ unicode wchar-t wstring wchar

我用C ++编写一个程序,必须处理unicode字符。 主要问题是我使用算法,我需要解析我的s / wstrings char by char

std::wstring word = L"Héllo"
for (auto &e : word)
// doing something with e

但如果我这样做:

std::wstring word = L"Héllo"
for (auto &e : word)
    std::wcout << e << std::endl;

我得到了这个输出:

H
?
l
l
o

我做错了吗?

请注意,当我使用word时,std::wcout << word;会正确打印。

编辑@Ben Voigt

以下是std::wcout << std::hex << std::setw(4) << (int)e << L" " << e << L'\n';

  48 H
  e9 �
  6c l
  6c l
  6f o

1 个答案:

答案 0 :(得分:0)

要按照您的意图打印字符,请尝试以下操作:

#include <string>
#include <iostream>
#include <fcntl.h>
#include <io.h>
int _tmain(int argc, _TCHAR* argv[])
{
    std::wstring word = L"Héllo";
    _setmode(_fileno(stdout), _O_U16TEXT);
    for (auto &e : word)
        std::wcout << e << std::endl;
    return 0;
}

此帖中的更详细说明:Why are certain Unicode characters causing std::wcout to fail in a console app?