0

Здравствуйте. У меня стоит английская винда и студия. Мне понадобилось обработать русский текст, но при вводе строки, в дебаггере вижу, что строка состоит из одних символов '?'. Подскажите пожалуйста, что нужно сделать? Использую

std::string

1 Answers1

1

Вот простое решение. Кодировка консоли и локаль устанавливаются на русскую кодировку CP_1251. В этом случае чтение/запись в консоль где-то "внутри" оборачивается преобразованием из Юникода/в Юникод.

#include <iostream>
#include <sstream>
#include <windows.h>

int main() { SetConsoleCP( 1251 ); // настраиваем кодировку консоли (ввод) SetConsoleOutputCP( 1251 ); // (вывод)

// настраиваем внутренние механизмы на эту кодировку
setlocale(LC_ALL, ".1251");

std::wstring line;
std::getline( std::wcin, line );
std::wcout &lt;&lt; L"Привет, " &lt;&lt; line &lt;&lt; std::endl;

}

У меня получилось добиться того, чтобы сама консоль работала в режиме "Юникод" на вывод, но тот же фокус на ввод не прошёл:

int main()
{
    _setmode( fileno(stdout), _O_WTEXT );
    std::wstring line( L"Привет2" );
    std::wcout << line << std::endl;
}
atwice
  • 2,377