Различия между файлами unix и windows

Правильно ли я предполагаю, что единственная разница между «файлами Windows» и «файлами unix» - это разрыв строки?

У нас есть система, которая была перенесена с машины Windows на машину unix, и у нас проблемы с форматом.

Мне нужно автоматизировать перевод между unix / windows до того, как файлы будут доставлены в систему в нашей «транспортной системе». Мне, вероятно, понадобится что-то для определения текущего формата и что-то для преобразования его в другой формат. Если большая разница только в новой строке, то я рассматриваю возможность просто прочитать файлы с помощью java.io. Насколько мне известно, они могут обрабатывать и то, и другое с помощью readLine. А затем просто напишите каждую строку с помощью

while (line = readline)
    print(line + NewlineInOtherFormat)
....

Резюме:

Самджудсон :

Это различие только в текстовых файлах, где UNIX использует одиночный перевод строки (LF) для обозначения новой строки, Windows использует возврат каретки / перевод строки (CRLF), а Mac использует только CR.

на что Cebjyre уточняет:

OS X использует LF, так же, как UNIX - MacOS 9 и ниже использовала CR, хотя

Пн

Также может быть разница в кодировке символов для национальных символов. Не существует "кодировки unix", но многие варианты Linux используют UTF-8 в качестве кодировки по умолчанию. Mac OS (которая также является unix) использует собственную кодировку (macroman). Я не уверен, что такое кодировка Windows по умолчанию.

Макдауэлл

Помимо различий в новой строке, метка порядка байтов может вызвать проблемы, если файлы обрабатываются как Unicode в Windows.

Cheekysoft

Однако другой набор проблем, с которыми вы можете столкнуться, может быть связан с кодировками однобайтовых / многобайтовых символов. Если вы видите странные неожиданные символы (не в конце строки), это может быть причиной. Особенно, если вы видите квадратные поля, вопросительные знаки, перевернутые вопросительные знаки, лишние символы или неожиданные символы с диакритическими знаками.

Сэди

В unix файлы, начинающиеся с. скрыты. В Windows это флаг файловой системы, к которому у вас, вероятно, непросто получить доступ. Это может привести к тому, что файлы, которые должны быть скрыты, теперь станут видимыми на клиентских машинах.

Права доступа к файлам у этих двух типов различаются. При копировании файлов в систему unix вы, вероятно, обнаружите, что теперь файлы принадлежат пользователю, который выполнял копирование, и имеют ограниченные права. Вам нужно будет использовать chown / chmod, чтобы убедиться, что правильные пользователи имеют к ним доступ.

Существуют инструменты, помогающие решить эту проблему:

Полду

Если вас просто интересует содержимое текстовых файлов, то да, окончания строк разные. Взгляните на что-то вроде dos2unix, здесь это может помочь.

Cheekysoft

Как предполагает pauldoo, такие инструменты, как dos2unix, могут быть очень полезными. Обратите внимание, что они могут быть в вашей системе linux / unix как fromdos или tofrodos, или, возможно, даже как перекодированный набор инструментов общего назначения.

Помощь по кодированию на Java

Cheekysoft

При записи в файлы или чтении из файлов (которые вы контролируете) часто стоит указать используемую кодировку, поскольку большинство методов Java позволяют это. Однако также обеспечение соответствия языкового стандарта системы может сэкономить много боли.

Ответов (6)

Решение

Это различие только в текстовых файлах, где UNIX использует одиночный перевод строки (LF) для обозначения новой строки, Windows использует возврат каретки / перевод строки (CRLF), а Mac использует только CR.

В двоичных файлах не должно быть никакой разницы (т.е. JPEG на машине с Windows будет байт за байтом таким же, как тот же JPEG в Unix-боксе).

Помимо различий в новой строке, метка порядка байтов может вызвать проблемы, если файлы обрабатываются как Unicode в Windows.

Если вас просто интересует содержимое текстовых файлов, то да, окончания строк разные. Взгляните на что-то вроде dos2unix , здесь это может помочь.

(Конечно, есть много других вещей, которые делают файлы unix и windows разными, но я не думаю, что вас сейчас интересуют эти другие различия.)

Помимо приведенных ответов, вы можете столкнуться с проблемами в различных файловых системах:

  • В unix файлы, начинающиеся с . скрыты. В Windows это флаг файловой системы, к которому у вас, вероятно, непросто получить доступ. Это может привести к тому, что файлы, которые должны быть скрыты, теперь станут видимыми на клиентских машинах.

  • Права доступа к файлам у этих двух типов различаются. При копировании файлов в систему unix вы, вероятно, обнаружите, что теперь файлы принадлежат пользователю, который выполнял копирование, и имеют ограниченные права. Вам нужно будет использовать chown / chmod, чтобы убедиться, что правильные пользователи имеют к ним доступ.

Как предполагает pauldoo, такие инструменты, как dos2unix, могут быть очень полезными. Обратите внимание, что они могут быть в вашей системе linux / unix как fromdos или tofrodos , или, возможно, даже как перекодированный набор инструментов общего назначения .

Однако другой набор проблем, с которыми вы можете столкнуться, может быть связан с кодировками однобайтовых / многобайтовых символов. Если вы видите странные неожиданные символы (не в конце строки), это может быть причиной. Особенно, если вы видите квадратные поля, вопросительные знаки, перевернутые вопросительные знаки, лишние символы или неожиданные символы с диакритическими знаками.

Запуск команды locale в вашем поле * nix сообщит вам, что такое языковой стандарт системы. Если это отличается от кодировки, используемой в текстовых файлах, которые были переданы с компьютера Windows, то это иногда может вызывать проблемы, в зависимости от использования этих файлов. Вы можете использовать очень мощную команду recode, чтобы попытаться выполнить преобразование между различными кодировками, а также решить любые проблемы с окончанием строки. recode -l покажет вам все форматы и кодировки, между которыми инструмент может конвертировать. Скорее всего, это будет ОЧЕНЬ длинный список.

При записи в файлы или чтении из файлов (которые вы контролируете) часто стоит указать используемую кодировку, поскольку большинство методов Java позволяют это. Однако также обеспечение соответствия языкового стандарта системы может сэкономить много боли.

Также может быть разница в кодировке символов для национальных символов. Не существует "кодировки unix", но многие варианты Linux используют UTF-8 в качестве кодировки по умолчанию. Mac OS (которая также является unix) использует собственную кодировку (macroman). Я не уверен, что такое кодировка Windows по умолчанию.

Но это может быть еще одним источником неприятностей (помимо различных переносов строк).

Какие у вас проблемы? Проблемы, связанные с разрывом строки, можно легко исправить с помощью программ dos2unix или unix2dos на unix-машине.