Инструменты POSIX на основе Unicode (кроме Cygwin) для Windows?

1397
Mehrdad

GNU Win32 и MSYS великолепны, но кажется, что все их инструменты используют версию API Windows ANSI, а не версии Unicode.

Очевидно, что они предназначены для Windows 95 и 98, а не для Windows XP и Windows 7 ... и вызывают много проблем с любыми нетипичными именами файлов, строками и т. Д.

Есть ли аналогичный POSIX набор инструментов ( другие, чем Cygwin), который использует версию Unicode на Windows API, (и который, таким образом, поддерживает Unicode)?

3
Почему исключают Cygwin? Также обратите внимание, что MSYS - это форк Cygwin. ak2 12 лет назад 0
Для ясности, не могли бы вы привести пример нетипичного имени файла и нетипичной строки и проблемы, которую вызывает каждая из них. RedGrittyBrick 12 лет назад 0
@ ak2: я исключаю Cygwin, потому что я не ищу Cygwin. Тот факт, что MSYS является ответвлением Cygwin, меня не беспокоит. Mehrdad 12 лет назад 0
@RedGrittyBrick: Если вы называете файл `╧.txt`, а затем выполняете` ls` в MSYS, он говорит: `ls: -.txt: такого файла или каталога нет` Mehrdad 12 лет назад 0
Я только что запустил `touch ╧.txt` в оболочке Cygwin bash, и он отображается с правильным именем в Cygwin` ls` в `xterm`, в командной строке Windows и в проводнике Windows. (Он не выглядит прямо под оболочкой Cygwin bash по умолчанию, в которой используется тот же эмулятор терминала, что и в командной строке Windows.) Это может помочь понять, просто почему вы не ищете Cygwin. Keith Thompson 12 лет назад 1
@KeithThompson: * Одна * причина (из * многих *) состоит в том, что это смехотворно медленно. Но я бы предпочел не идти в этом направлении ... Я просто избегаю Cygwin, потому что это не соответствует моим потребностям. Не нужно больше информации. Mehrdad 12 лет назад 0
@ Mehrdad: Моя точка зрения такова, что, зная, почему ты хочешь избежать, Cygwin может рассказать нам кое-что о твоих потребностях. Насколько я могу судить, Cygwin действительно отвечает вашим потребностям *, как вы их уже заявили *. (Я не заметил, что это особенно медленно, но я не делал никакой чувствительной к производительности работы в Cygwin.) Keith Thompson 12 лет назад 0
@KeithThompson: Что касается вопроса, то все довольно просто: мне нужен набор инструментов POSIX с поддержкой Unicode (например, MinGW, UWIN, GnuWin32 или любой другой) *, который не является Cygwin *. Я чертовски уверен, что это кристально ясно. Я не собираюсь продолжать обсуждать тонкости того, почему я не / не могу использовать Cygwin, поэтому, если вы не будете продолжать спрашивать об этом, я был бы очень признателен. Спасибо! Mehrdad 12 лет назад 0
@ Mehrdad: Если вы не хотите предоставлять информацию, я буду рад не пытаться помочь вам. Keith Thompson 12 лет назад 0
@KeithThompson: Ну, вы можете относиться к этому, со всеми намерениями и целями, как если бы мой работодатель запретил Cygwin на работе и запретил мне обсуждать, почему я не могу его использовать. Я не хочу с ним драться. Если вы все еще не можете помочь, тогда это совершенно нормально; спасибо за попытку в любом случае. Mehrdad 12 лет назад 1
@ Mehrdad: Если вы * не можете * предоставить информацию, это другая история. Это было не ясно (для меня) из исходного вопроса или из ваших предыдущих комментариев. Я полагаю, что что-то вроде «я не могу использовать Cygwin по причинам, которые я не могу раскрыть» в вопросе было бы полезно. Чтобы уточнить, MSYS было бы хорошо, если бы это работало? Keith Thompson 12 лет назад 1
@KeithThompson: Да, MinGW / MSYS и GnuWin32 (и, возможно, другие) будут в порядке, если они будут работать. Mehrdad 12 лет назад 0

2 ответа на вопрос

2
ak2

Собственная подсистема Microsoft для приложений Unix (SUA). Хотя доступно только с Windows Ultimate и Enterprise.

Исправление : SUA не поддерживает Unicode. Согласно его locale -aкоманде, он поддерживает только ISO-8859-1, EUC-JP и SJIS.

Что касается примечания, MKS Toolkit, который является другой Unix-подобной средой для Windows, также не поддерживает Unicode в именах файлов, согласно его man- странице unicode.5.

Утилиты MKS Toolkit не могут обрабатывать символы не-OEM в именах файлов, если языковой стандарт не поддерживает двухбайтовые символы (например, японский языковой стандарт). Следовательно, даже если утилиты поддерживают символы UTF-8 и Unicode в файлах на всех платформах, для достижения максимальной переносимости на всех платформах Windows все имена файлов, используемые в сценариях для таких утилит, как awk, sh, csh и другие, должны содержать только символы ASCII из кодовая страница OEM.

Да, я уже знал, что он существует, но даже не пытался увидеть, является ли это Unicode, потому что у меня нет Ultimate / Enterprise. +1 в любом случае. Mehrdad 12 лет назад 0
На самом деле, вы *** уверены ***, что он поддерживает Unicode? Я только что попробовал `ls` в версии для Windows XP для файла с именем` ╧` и получил обратно `ls: -: нет такого файла или каталога`. Mehrdad 12 лет назад 0
Нет, похоже, что ты не прав. Я только что попробовал версию для Windows 8, и `ls` вернул` -` в качестве имени файла (но на этот раз без ошибок). Я передал вывод в текстовый файл, а затем просмотрел содержимое и убедился, что это не проблема с отображением консоли. Mehrdad 12 лет назад 0
Извините, я ошибаюсь. SUA действительно использует область частного использования Unicode для представления таких символов, как ':', которые не разрешены в именах файлов Windows, так же, как Cygwin, поэтому я предполагаю, что я ошибочно подразумевал, что он имеет общую поддержку Unicode. ak2 12 лет назад 0
Помните, что * консоль Windows * (эквивалент окна терминала) имеет некоторые проблемы с поддержкой Unicode - по умолчанию она запускается в кодовой странице OEM, а переключение на UTF-16 или UTF-8 (chcp 65000 или 65001) приводит к поломке. Это не всегда ошибка программы, даже если она использует API-интерфейсы Unicode, она не всегда может отображать символы Unicode на консоли. Используйте некоторый исполняемый инспектор, чтобы проверить, какие API использует программа. grawity 12 лет назад 0
@ Grawity: Как я объяснил, это точно ***, поэтому я также передал вывод в другой файл, а затем проверил результат там ... Mehrdad 12 лет назад 0
0
Jason Chiang

Я бы предложил вам попробовать UTF-8 Cygwin ( http://www.oki-osk.jp/esc/utf8-cygwin/ ) для совместимости с utf8.

Я использовал DeltaCopy, который основан на Cygwin (он поставляется с Cygwin1.dll при установке). Возникла проблема с обработкой китайского имени файла (многобайтовый символ в имени файла и имени папки)

После замены файла cygwin1.dll на версию «UTF-8 Cygwin». Все файлы Unicode, которые я синхронизирую с сервером, правильно загружены на сервер.

Это очень простое решение, поскольку в статистике «UTF-8 Cygwin» он работает с символами Юникода, но при этом сохраняет бинарную совместимость с текущим Cygwin.