Category:

Приключения юниксиста (юниксоида?) под виндами



Понадобилось мне давеча спортировать одно консольное приложение под винды (Win7). Ну что, приложение как приложение, ничего особенного. Ну пользуется юникодом, ну пользуется ESC-последовательностями, казалось бы, делов-то куча. Ан нет.

Засада номер 1: На середине второго десятилетия XXI века надо руками включать юникод (chcp 65001).

Засада номер 2: Если байты UTF-8, относящиеся к одному символу, разорваны на два системных вызова write, то на экране получаем козью морду, а не символ юникода. Пришлось плюнуть и на chcp 65001, и на системный вызов write, и воспользоваться WriteConsoleW (для этого пришлось написать функцию сбора юникода из байтиков, естественно).

Засада номер 3: Из-за большого ума Майкрософт решил не реализовывать ESC-последовательности в консольном окне. Пользуйтесь, дескать, разработчики дорогие, нашим всемогущим console API и не выпендривайтесь.
— Что? Переносимость? Какая в подоконник переносимость?
Ну ладно, так и быть, нашел я https://github.com/adoxa/ansicon

Итого, убил полдня на то, что должно было просто работать™, причем так мало исключительно благодаря ansicon. И так у них всё