1

Создаю клиент-серверное приложение, мини мессанджр. И пытаюсь передать русские символы из Windows в Ubuntu. Постоянно приходили какие-то кракозябры и не мог понять в чем же дело, даже распечатал коды символов в Windows и Ubuntu, получив при этом одинаковый результыт, короче, выяснилось что команда wcin установлена в другой локали, посмотрел в интернете как устанавливается для wcin локаль, что-то вроде: std::wcin.imbue(std::locale("")); но постоянно устанавливается локаль C которая конечно же ничего не отображает корректно, вместо кода 'A'=410, печатается код = 402. Я пытался сделать следующее:

std::string local = std::setlocale(LC_ALL, "");
std::wcout.imbue(std::locale(local));
std::wcin.imbue(std::locale(local));

но получаю ошибку: terminate called after throwing an instance of 'std::runtime_error' what(): locale::facet::_S_create_c_locale name not valid чтобы я туда не писал(".1251","rus",".utf8" и т.д. ) На все один ответ, не знаю что мне делать с этим. Очень нужно, чтобы кто-то помог установить локаль для wcin.

Fedor
  • 25
  • Это похоже на проблему XY. При использовании wcin на Windows в установки локали необходимость отсутствует. Ну а на linux отсутствует необходимость в wcin. – user7860670 Jun 05 '23 at 12:41
  • Ничего не понял, мне нужно печатать строку и отправлять её, она в кривой локали заносится в переменную и отправляется соответственно тоже. – Fedor Jun 05 '23 at 12:44
  • Русский язык в консоли - вот решение для Windows. Как видите, никакой локали там не фигурирует. Ну а на linux отсутствует необходимость в wcin, как я уже писал выше. – user7860670 Jun 05 '23 at 12:46
  • Я жалуюсь не на русский язык в консоли, он устанавливается std::string local = std::setlocale(LC_ALL, ""); Я жалуюсь именно на ввод с клавиатуры wcin, что он вводит символы с другой коддировкой – Fedor Jun 05 '23 at 12:50
  • std::string local = std::setlocale(LC_ALL, ""); не устанавливает русский язык в консоли... – user7860670 Jun 05 '23 at 12:53
  • извиняюсь, ваш ответ выше мне помог, спасибо большое – Fedor Jun 05 '23 at 12:54

0 Answers0