Tag Archives: Mimboloveutf-8

UTF-8 в Cygwin

Written by elwood

Иногда бывает нужно выполнить команду в MinGW или Cygwin так, чтобы аргументы командной строки были переданы в правильной кодировке. Под правильной кодировкой, разумеется, я имею в виду UTF-8. Крайние версии как одного, так и другого продукта уже давно научились принимать и выводить русские символы, и на первый взгляд, всё с этим в порядке. Но при ближайшем рассмотрении оказывается, что не всё так гладко. Например, MinGW использует для всего кодировку Win-1251, и передать аргумент в программу в UTF-8 (для того, чтобы понять, в какой кодировке MinGW отправляет аргументы, пришлось написать отдельную java-аппликацию, которая просто писала в файл всё, что получает на вход). Конечно, если вы имеет доступ к коду вызываемой программы, то можете её оснастить конфигой, которая бы конвертировала входные параметры из Win-1251 в UTF-8. Но как быть с другими приложениями ? Конкретно меня интересовал cURL. К сожалению, мне не удалось сконфигурировать MinGW так, чтобы он работал корректно. Было бы классно, если бы в будущем это можно было сделать, а ещё лучше – чтобы это работало по умолчанию.

Зато Cygwin обрадовал. В нём даже всё заработало по умолчанию. Но тоже не обошлось без проблем. Если вводить команду руками целиком – всё хорошо. Но если попытаться вставить из буфера обмена, то результат будет зависеть от текущего языка ввода. Если это английский, то английский текст вставляется без проблем. Но в русском почему-то появляются артефакты [G. И наоборот – если язык ввода – русский, то русский текст вставляется нормально, а английский обильно перемежается теми же артефактами. Пример:

cygwin-bug

В итоге, окончательное решение так и не было найдено. При острой необходимости скопировать команду, в которой рядом английский и русский, приходится копировать по частям, или править вставленное.