Решил для учебных целей писать консольную программу, которая должна работать и в Windows, и в Linux.
Как я понимаю, используются разные кодировки в терминалах/консолях.
Как корректно вводить и выводить строки с клавиатуры и на экран?
Как корректно организовать файловый ввод-вывод с использованием текстовых файлов?
Использую Qt Opensource 5.5.1. Буду перекомпилировать на целевой системе.
Основной момент в переносимости - не использовать на прямую функций API ОС, все только через библиотечные вызовы.
Консольную переносимую программу можно и без Qt написать - с использованием стандартной библиотеки.
Хорошо. Не буду использовать Qt. Но как мне организовать файловый и консольный ввод-вывод строк с русскими буквами? Я когда-то пытался использовать то ли Visual C++ Express, то ли wxDevC++, и там всегда кракозябры. В линуксе для моих задач все нормально. Я не уверен, что возьму текстовики с данными, исходник программы, перекомпилирую и все будет работать нормально.
std:setlocale тебе в помощь https://habrahabr.ru/post/164193/ https://habrahabr.ru/post/107679/
С кодировками не все просто. Например, для консольного приложения в Windows есть кодировка консоли; кодировка текста, возвращаемая/принимаемые системными функциями (например получаемые от ОС имена файлов, содержащие кирилические символы); кодировка строк в исходниках программы.
Проще всего файлы программы всегда писать в UTF8 и программу собирать с поддержкой Unicode, тогда надо будет конвертировать только 2 кодировки Unicode и кодировку консоли. Причем кодировка консоли для русской винды может быть как 866 так и 1251. Все строковые литералы объявлять с префиксом L (L"текст"), для строк использовать тип wchar_t* или std::wstring.
В никсах, на сколько я знаю, дело обстоит не лучше. В консоли своя кодировка, в графической оболочке своя, в файловой системе своя (причем в каждой ФС может быть своя собственная кодировка).