MaxLevs
@MaxLevs

Кросс-платформенное решение для вывода кириллицы. Как реализовать?

Есть проект, который хочу собирать под Windows и Linux. Сам сижу на MacOS.
Если под mac всё собирается и выводится по-русски корректно, то с windows какие-то проблемы.

Решил использовать clocale и std::setlocale(LC_ALL, "Russian") – тоже не помогло, в Windows выводятся P и ?.

#include<iostream>
#include "approx_lib.h"

int main() {
    double circumference_number;

    std::cout << "Введите обхват (мм): ";


На форумах предлагают использовать решения, специфические для windows (по типу подключения Windows.h или использования специальных типов для винды), но эти варианты не подходят, так как сделают сборку под другие системы невозможной.

Какие есть действенные решения?
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 4
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Стандартные решения это что то типа

#if def(“Win32”)
Ответ написан
@res2001
Developer, ex-admin
Для винды придется делать отдельную реализацию, т.к.
1. В консоли винды несколько русских кодировок (cp1251 и cp866, причем по умолчанию cp866).
2. В консоли винды кодировку можно менять командой chcp из самой консоли на лету.
Так что нормальная реализация должна узнать текущую кодировку и перекодировать весь выводимый текст в нее. Аналогично и с консольным вводом.
Менять кодировку из программы - плохой вариант, хотя и вполне работающий.
Ответ написан
Комментировать
Adamos
@Adamos
Решений, собственно, два - либо заморачиваться с перекодировками самому, втыкая в код ifdef-ы, либо использовать кроссплатформенную библиотеку, где это кто-то сделал за вас.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы