Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Как вывести русский текст в консоль

#cpp #c #visual_cpp #gcc #mingw


Есть UTF-8 строка с русским текстом: "\xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82".

Надо вывести ее на консоль так, чтобы это работало на следующих трех платформах и
компиляторах:


Windows и VC++,
Windows и MinGW,
Linux и gcc.


Предполагается что шрифт консоли позволяет показать хотя бы русские буквы.

Следует обратить внимание на то, что в MinGW локали реализованы не полностью, и многие
решения для VC++ не будут работать.
MinGW можно взять здесь.

Можно использовать #ifdef. Можно использовать сторонние библиотеки, например Boost.



Вот пример решения дня MinGW, но нужна поддержка всех трех платформ.

> type main.cpp
#include 
#include 
#include 
#include 

int main() {
    std::wstring_convert,
wchar_t> conv;
    std::wstring ws = conv.from_bytes("[test \xd1\x82\xd0\xb5\xd1\x81\xd1\x82 \xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88]\n");
    DWORD _; ::WriteConsoleW(::GetStdHandle(STD_OUTPUT_HANDLE), ws.c_str(), ws.size(),
&_, nullptr);
}

> g++ -std=c++14 -O2 -Wall -pedantic main.cpp && a
[test тест テスト]

    


Ответы

Ответ 1



Библиотека Qt (достаточно Core) кроссплатформенная и собирается любым компилятором. Вариант вывода в консоль: QString string = QString::fromUtf8("Привет мир !"); // для консоли Windows QTextCodec *codec = QTextCodec::codecForName("IBM 866"); // для Linux QTextCodec *codec = QTextCodec::codecForName("System"); QByteArray encodedString = codec->fromUnicode(string); std::cout << encodedString.data(); Список поддерживаемых Qt кодеков

Комментариев нет:

Отправить комментарий