Вопрос

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

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

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

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

Краткое содержание:

Самджудсон:

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

которому Себжире уточняет:

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

Мо

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

Макдауэлл

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

Чикисофт

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

Сэди

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

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

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

Полду

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

Чикисофт

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

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

Чикисофт

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

Это было полезно?

Решение

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

Двоичные файлы не должны иметь никакой разницы (т.е.JPEG на компьютере с Windows будет побайтно таким же, как тот же JPEG на компьютере unix.)

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top