переносимость Lin<=>Win консольных приложений
Добавлено: 22 мар 2013, 17:10
Вопрос связан с соседней темой: исполнение Windows промышленных проектов под Wine.
Состоит он вот в чём:
- создадим (напишем) платформенно независимое консольное приложение ... "Привет мир!"
- на С или С++ ... используя либо Boost (как в теме откуда переплыл вопрос), или Apache Portable Runtime (APR) ... , или любой инструмент переносимого программирования - проблема будет наблюдаться везде!
- но в программе будут выводиться русскоязычные строки:
- такая программа в Linux будет нормально (ожидаемо) исполняться, т.к. в современном Linux и редакторы кода (или IDE разработки) и терминал работают в UTF-8 (Unicode);
- если перенести такое приложение в MS Visual Studio (а для чего мы тогда уродовались с Boost? ) + добиться нормальной сборки проекта (указанием путей инклудов и бинарных библиотек Boost), то программа может быть скомпилирована...
- но при запуске её в консоли - получим кракозябры ... текст UTF-8, который прекрасно видится как надо в редакторе MS Visual Studio, при выводе в тупую Windows консоль, ожидающую свою уродливую кодировку CP-1251, отображается бредовым набором символов.
Как?
Проблема здесь не в переносимости UNIX <-> Windows, проблема здесь чисто Windows, потому как если такое приложение "Привет мир!" набить в пустом консольном проекте Windows, то получится такое же уродство. Но меня мало занимают проблемы разбирательства с Windows-уродствами ... пусть они "сами хоронят своих мертвецов".
Вопрос маленький и конкретный, состоящий в том: как запустить консольное приложение в Windows с отображением русского текста?
И с тем, чтобы явно в код не вписывать всякие Windows-ные штучки-дрючки, по типу явного преобразования строк в CP-1251 ... что не будет работать ни в одной другой системе.
Состоит он вот в чём:
- создадим (напишем) платформенно независимое консольное приложение ... "Привет мир!"
- на С или С++ ... используя либо Boost (как в теме откуда переплыл вопрос), или Apache Portable Runtime (APR) ... , или любой инструмент переносимого программирования - проблема будет наблюдаться везде!
- но в программе будут выводиться русскоязычные строки:
Код: Выделить всё
std::cout << "Привет мир!" << std::endl;
- если перенести такое приложение в MS Visual Studio (а для чего мы тогда уродовались с Boost? ) + добиться нормальной сборки проекта (указанием путей инклудов и бинарных библиотек Boost), то программа может быть скомпилирована...
- но при запуске её в консоли - получим кракозябры ... текст UTF-8, который прекрасно видится как надо в редакторе MS Visual Studio, при выводе в тупую Windows консоль, ожидающую свою уродливую кодировку CP-1251, отображается бредовым набором символов.
Как?
Проблема здесь не в переносимости UNIX <-> Windows, проблема здесь чисто Windows, потому как если такое приложение "Привет мир!" набить в пустом консольном проекте Windows, то получится такое же уродство. Но меня мало занимают проблемы разбирательства с Windows-уродствами ... пусть они "сами хоронят своих мертвецов".
Вопрос маленький и конкретный, состоящий в том: как запустить консольное приложение в Windows с отображением русского текста?
И с тем, чтобы явно в код не вписывать всякие Windows-ные штучки-дрючки, по типу явного преобразования строк в CP-1251 ... что не будет работать ни в одной другой системе.