Различия между файлами unix и windows
Правильно ли я полагаю, что единственная разница между "файлами окон" и "файлами unix" - это разрыв строк?
У нас есть система, которая была перенесена с Windows-машины на Unix-машину и имеет проблемы с форматом.
Мне нужно автоматизировать перевод между unix/windows, прежде чем файлы будут доставлены в систему в нашей "транспортной системе". Мне, вероятно, понадобится что-то, чтобы определить текущий формат и что-то, чтобы преобразовать его в другой формат.
Если это просто новая строка, большая разница, то я рассматриваю только чтение файлов с помощью java.io. Насколько я знаю, они могут обрабатывать оба с readLine. А затем просто напишите каждую строку с помощью
while (line = readline)
print(line + NewlineInOtherFormat)
....
Резюме:
samjudson:
Это только разница в текстовых файлах, в которых UNIX использует один Line Feed (LF) для обозначения новой строки, Windows использует Return/Line Feed (CRLF) для каретки, а Mac использует только CR.
на который Cebjyre уточняется:
OS X использует LF, то же, что и UNIX - MacOS 9 и ниже, использовал CR, хотя
Mo
Также может быть разница в кодировке символов для национальных символов. "Unix-encoding" не существует, но многие версии Linux используют UTF-8 в качестве кодировки по умолчанию. Mac OS (которая также является unix) использует собственную кодировку (macroman). Я не уверен, что такое кодировка по умолчанию Windows.
McDowell
В дополнение к различиям в новой строке знак байтового байта может вызвать проблемы, если файлы обрабатываются как Unicode в Windows.
Cheekysoft
Однако другой набор проблем, с которыми вы столкнетесь, может быть связан с одиночными/многобайтовыми кодировками символов. Если вы видите странные неожиданные символы (не в конце строки), это может быть причиной. Особенно, если вы видите квадратные квадратики, вопросительные знаки, перевернутые вопросительные знаки, дополнительные символы или неожиданные акцентированные символы.
Sadie
В unix файлы, начинающиеся с. скрыты. В Windows это флаг файловой системы, к которому у вас, вероятно, нет простого доступа. Это может привести к тому, что файлы, которые должны быть скрыты, теперь становятся видимыми на клиентских машинах.
Разрешения для файлов различаются между ними. Вы, вероятно, обнаружите, что при копировании файлов в систему unix файлы теперь принадлежат пользователю, который выполнял копирование и имел ограниченные права. Вам нужно будет использовать chown/chmod, чтобы убедиться, что у правильных пользователей есть к ним доступ.
Существуют инструменты, помогающие решить эту проблему:
pauldoo
Если вас просто интересует содержимое текстовых файлов, то да, окончание строк отличается. Взгляните на что-то вроде dos2unix, это может помочь здесь.
Cheekysoft
Как предлагает pauldoo, такие инструменты, как dos2unix, могут быть очень полезными. Обратите внимание, что это может быть в вашей системе linux/unix как fromdos или tofrodos, или, возможно, даже в том случае, когда утилита общего назначения перекодируется.
Справка по java-кодированию
Cheekysoft
При написании файлов или чтении из файлов (которые вы контролируете), часто стоит указать, какую кодировку использовать, как это допускается большинством методов Java. Тем не менее, также гарантируя, что соответствие языку системы может сэкономить много боли
Ответы
Ответ 1
Это только разница в текстовых файлах, где UNIX использует один Line Feed (LF) для обозначения новой строки, Windows использует Return/Line Feed (CRLF) для каретки, а Mac использует только CR.
Двоичные файлы там не должны иметь разницы (т.е. JPEG на машине Windows будет байт для байта, такой же, как тот же JPEG в окне unix.)
Ответ 2
Также может быть разница в кодировке символов для национальных символов. "Unix-encoding" не существует, но многие версии Linux используют UTF-8 в качестве кодировки по умолчанию. Mac OS (которая также является unix) использует собственную кодировку (macroman). Я не уверен, что такое кодировка по умолчанию Windows.
Но это может быть еще одним источником проблем (кроме разных строк).
В чем ваши проблемы? Проблемы, связанные с расстановкой строк, могут быть легко скорректированы с помощью программ dos2unix или unix2dos на unix-machine
Ответ 3
Если вас просто интересует содержимое текстовых файлов, то да, окончание строк отличается. Посмотрите на что-то вроде dos2unix, это может быть полезно здесь.
(Конечно, есть много других вещей, которые делают файлы unix и windows разными, но я не думаю, что вы заинтересованы в этих различиях прямо сейчас.)
Ответ 4
В дополнение к указанным ответам вы можете найти проблемы с различными файловыми системами:
-
В unix файлы, начинающиеся с ., скрыты. В Windows это флаг файловой системы, к которому у вас, вероятно, нет простого доступа. Это может привести к тому, что файлы, которые должны быть скрыты, теперь становятся видимыми на клиентских машинах.
-
Разрешения для файлов различаются между ними. Вы, вероятно, обнаружите, что при копировании файлов в систему unix файлы теперь принадлежат пользователю, который выполнял копирование и имел ограниченные права. Вам нужно будет использовать chown/chmod, чтобы убедиться, что у них есть доступ к ним.
Ответ 5
В дополнение к различиям в новой строке знак
Ответ 6
Как предлагает pauldoo, инструменты, такие как dos2unix, могут быть очень полезными. Обратите внимание, что это может быть в вашей системе linux/unix как fromdos или tofrodos, или, возможно, даже в качестве инструмента общего назначения recode.
Однако другой набор проблем, с которыми вы столкнетесь, может быть связан с одиночными/многобайтовыми кодировками символов. Если вы видите странные неожиданные символы (не в конце строки), это может быть причиной. Особенно, если вы видите квадратные квадратики, вопросительные знаки, перевернутые вопросительные знаки, дополнительные символы или неожиданные акцентированные символы.
Запустив команду locale в поле * nix, вы узнаете, что такое локаль системы. Если это отличается от кодировки, используемой в текстовых файлах, которые были переданы с компьютера Windows, это иногда может вызывать проблемы в зависимости от использования этих файлов. Вы можете использовать очень мощную команду recode, чтобы попытаться преобразовать между различными кодировками, а также любые проблемы с окончанием строки. recode -l покажет вам все форматы и кодировки, которые инструмент может конвертировать между ними. Вероятно, это будет ОЧЕНЬ длинный список.
При написании файлов или чтении из файлов (которые вы контролируете), часто стоит указать кодировку, как это делает большинство методов Java. Тем не менее, также гарантируя, что соответствия языку системы могут сэкономить много боли.