ASCII против бинарных против авто?

Я пересылаю файлы между серверами и только начал замечать, что некоторые из них модифицируются, превращаясь в одну длинную непрерывную строку, в отличие от возврата и переноса строки, которые у них были изначально. Я предполагаю, что это как-то связано с типом передачи моего FTP-клиента, который изначально был установлен на "Авто", но в качестве дополнительных опций были выбраны "Бинарный" и "ASCII".

Короче говоря, каковы различия между способами передачи файла с одного сервера на другой, и смогут ли эти различия изменить файл так, как я упоминал выше?

Переход с Windows на Linux.

4 ответа

Решение

"Двоичный" режим передачи FTP копирует файлы точно, байт за байтом. Просто и понятно.

Однако при переносе текстовых файлов между разными операционными системами это может быть не тем, что вам нужно - разные операционные системы используют разные коды для представления переносов строк. Для этого существует режим "ASCII": он автоматически переводит все окончания строк из формата исходной системы в формат назначения.

Не уверен насчет "Авто", но я представляю, что похоже, что расширение файла или что-то подобное решает, является ли это текстовым файлом, и пытается угадать соответствующий режим.

Какой режим вам нужен, зависит от того, что именно вы делаете с файлами... если вы просто копируете их для их резервного копирования, то вы, вероятно, захотите копировать в двоичном режиме, чтобы они были точно такими же, когда Вы позже восстановите их на сервер Windows снова. Если их нужно использовать в виде текстовых файлов (возможно, в виде файлов конфигурации для кроссплатформенной программы?) С обеих сторон, вам потребуется использовать режим ASCII для их перевода.

РЕДАКТИРОВАТЬ: Насколько я могу сказать, FTP файлы из Windows в Linux никогда не должны приводить к исчезновению разрывов строк... однако, если вы копируете их в режиме ASCII, а затем возвращаете их на сервер Windows в двоичном режиме, Linux Окончания строк в стиле могут не распознаваться в окне Windows. (Блокнот их не увидит; Wordpad увидит; YMMV с другим программным обеспечением.)

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

Различия действительно есть, и они будут возиться с передачей файлов не в текстовом формате, если вы не используете двоичную опцию - как правило, всегда используйте, если хорошо:)

Из какой операционной системы вы переносите файлы в / из? Linux/Unix используют разные переводы строк, чем Windows. Поэтому, если вы сгенерируете файл на компьютере с Linux и откроете его в Windows, это может выглядеть странно. Есть утилиты для исправления этого, хотя по моему опыту, если вы используете WordPad на Windows вместо блокнота, все будет в порядке.

Windows и Unix имеют разные байты в конце строк (Windows - гекс 0D 0A, Unix - просто 0A). При передаче файлов в двоичном режиме байты файла будут перемещены с одного компьютера без изменений. Это требуется для двоичных форматов (например, ZIP-файлов, изображений и т. Д.), Но может привести к проблемам с текстовыми файлами: например, notepad.exe в Windows отобразит текстовый файл с разрывами строк в стиле Unix в виде одной длинной строки, редактор Unix может показывать ^M в конце каждой строки при просмотре стиля Windows.

Таким образом, технически для двоичных форматов (zip, jpg, png и других) вам нужно установить FTP на BINARY, в то время как для текстовых форматов (HTML, PHP, CGI и т. Д.) Вам нужно установить его на ASCII.

Большинство хороших программ FTP также имеют автоматическую настройку, что означает, что они будут определять режим (BINARY или ASCII) в зависимости от известных расширений файлов, например, он автоматически переключит передачу для файла JPG в BINARY и отправит / получит файл PHP в ASCII. Режим.

Другие вопросы по тегам