Как инициализировать и распечатать std :: wstring? - PullRequest
50 голосов
/ 09 января 2012

У меня был код:

std::string st = "SomeText";
...
std::cout << st;

, и это работало нормально.Но теперь моя команда хочет перейти на wstring.Поэтому я попытался:

std::wstring st = "SomeText";
...
std::cout << st;

, но это дало мне ошибку компиляции:

Ошибка 1 ошибка C2664: 'std :: basic_string <_Elem, _Traits, _Ax> :: basic_string(const std :: basic_string <_Elem, _Traits, _Ax> &) ': невозможно преобразовать параметр 1 из' const char [8] 'в' const std :: basic_string <_Elem, _Traits, _Ax> & 'D: ...\ TestModule1.cpp 28 1 TestModule1

После поиска в Интернете я прочитал, что должен определить его как:

std::wstring st = L"SomeText"; // Notice the "L"
...
std::cout << st;

это скомпилировано, но печатает "0000000000012342" вместо "SomeText".

Что я делаю не так?

Ответы [ 4 ]

85 голосов
/ 09 января 2012

Для отображения wstring вам также нужна широкая версия cout - wcout.

std::wstring st = L"SomeText";
...
std::wcout << st; 
12 голосов
/ 09 января 2012

Используйте std::wcout вместо std::cout.

8 голосов
/ 11 января 2017

Этот ответ относится к тегу "C ++ / CLI" и связанной с ним консоли Windows C ++.

Если вы получили многобайтовые символы в std :: wstring, для его работы необходимо сделать еще две вещи.:

  1. Включить заголовки#include <io.h>#include <fcntl.h>
  2. Установить режим stdout_setmode(_fileno(stdout), _O_U16TEXT)

Результат: Multi-bytes console

6 голосов
/ 09 января 2012

попробуйте использовать std::wcout<<st, это решит вашу проблему.

std::wstring st = "SomeText";
...
std::wcout << st;
...