LINUX.ORG.RU

Как подружить std::wcin и std::wcout с кириллицей?

 , , ,


0

1

Почему-то у меня wcin не хочет работать с кириллицей, с ascii при этом работает без проблем. Не-ascii-символы просто игнорируются. При выводе «широких» литералов через wcout печатается ерунда. При этом с обычными литералами, std::string и QString соответствующие потоки вывода работают корректно. Гугл на все вопросы отвечает рекомендациями настроить локаль в консоли Шиндвс. Где вообще можно почитать, как с wstring работать под онтопиком?

★★★★★

С помощью std::codecvt вроде можно выводить через cin/cout, но это жуткие костыли.

meliafaro ★★★★★
() автор топика

Как ни странно, ВДРУГ заработало ни с того, ни с сего. Возможно, дело было в мешанине в одном приложении cin и wcin, а также cout и wcout.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от meliafaro

Возможно, дело было в мешанине в одном приложении cin и wcin, а также cout и wcout.

Именно, первая операция конфигурирует тип (narrow/wide) stdout и потом нужно использовать тот же тип вывода.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Ересь какая-то. stdout это FILE*, он работает только с narrow. std::wcout всегда преобразует wide в narrow в текущую локаль. В POSIX кодировка локали может быть только narrow.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

stdout это FILE*, он работает только с narrow.

Нет. В C (хоть и не с C89) есть wide функции и FILE работает в одном из двух режимов byte-oriented или wide-oriented. См. fputws и подобные.

xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.