WinSCP запутывает разрывы строк в файлах - как избежать этого?

7076
Lars

Я довольно устал от того, как WinSCP запутывает разрывы строк.

this is line 1 this is line 2 

Превращается в

this is line 1  this is line 2 

Я мог бы просто использовать FileZilla для FTP и Putty для SCP (я думаю, что замазка справится с этим), но это довольно раздражает. Как я могу смягчить эту проблему?

5
Вы можете зайти в настройки и использовать двоичный файл вместо автоматического. Кроме того, если вы используете внешний редактор (например, я), убедитесь, что он тоже не мешает. Мой никогда не доставлял мне проблем (я использую блокнот программистов или pnotepad) 13 лет назад 1
Так где же Ларс? Хит и разделить. ejbytes 7 лет назад 0

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

9
Merlin

Я бы сказал, что комментарий, оставленный acidzombie24 - лучший совет. Лично я не сталкивался с лучшей программой FTP, чем WinSCP. Я рекомендую вам изменить настройки для передачи с помощью Binary и использовать редактор, такой как NP ++, а не внутренний редактор.

Вот несколько скриншотов:

Binary Transfer

Editor

Добавив к ответу Мерлина, я исправил это, изменив настройки передачи с двоичного на автоматический. desbest 10 лет назад 0
Кроме того, вы должны убедиться, что текстовый режим не является обязательным для вашего внешнего редактора. Перейдите в «Редакторы», нажмите «Редактор», нажмите «Редактировать ...» и убедитесь, что «Принудительный режим передачи текста» снят. Vigrond 9 лет назад 0
3
Martin Prikryl

Отредактированная версия WinSCP FAQ Почему текстовые файлы переносятся неправильно после передачи или редактирования файла?

В частности, смотрите раздел « Известные проблемы ».


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

  • Разрывы строк потеряны. Кажется, будто весь файл находится в одной строке.
  • Разрывы строк дублируются. Кажется, что между каждой строкой есть дополнительная пустая строка.
  • Там странный символ / символ в конце каждой строки.

Форматы текстовых файлов

Разные платформы (операционные системы) используют разные форматы текстовых файлов. Наиболее распространенными форматами являются Unix и Windows формат. Основное отличие состоит в том, что для обозначения конца строки используется другой символ или последовательность символов. В Unix, это LF символ ( \n, 0Aили 10 в десятичной системе ). В Windows это последовательность из двух символов, CR и LF ( \r+ \n, 0D+ 0Aили 13 + 10 в десятичном формате).

Хотя многие приложения и системы в настоящее время могут работать с обоими форматами, для некоторых требуется определенный формат. При представлении файла в другом формате они не могут правильно его отобразить, как описано выше.

Режим передачи текста / ASCII

По этой причине клиенты и серверы передачи файлов поддерживают режим передачи текста / ASCII . При передаче файла в этом режиме файл (в идеале) преобразуется из исходного формата в исходную систему в собственный формат целевой системы. Например, при загрузке текстового файла в текстовом режиме из Windows в систему Unix окончания строки файла преобразуются из CR + LF в LF.

WinSCP по умолчанию использует двоичный режим передачи для всех файлов. Узнайте, как настроить его для использования режима передачи текста / ASCII . Вам также может потребоваться настроить правильный формат текстового файла на стороне сервера .

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

Известные проблемы с режимом передачи

  • FTP-сервер Pure-FTPd: при загрузке файла с окончаниями строк Windows (CR + LF) в текстовом / ASCII-режиме сервер заменяет LF на CR + LF, что приводит к неправильному CR + CR + LF. При открытии такого файла во внутреннем редакторе WinSCP редактор интерпретирует последовательность как два конца строки (CR и CR + LF), что приводит к пустой строке после каждой строки содержимого. Когда файл сохранен, внутренний редактор сохраняет два окончания строки Windows CR + LF и CR + LF. При загрузке они конвертируются в два LF. Обходной путь - использовать внешний редактор и убедиться, что WinSCP не включает текстовый режим для отредактированных файлов .

Отладка преобразования текстовых файлов

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

Чтобы определить окончания строк, используемые файлом в Windows, используйте следующую команду в консоли PowerShell, чтобы отобразить шестнадцатеричный дамп первых 100 символов данного файла ( example.txt):

Get-Content -Encoding Byte -TotalCount 100 example.txt |% " -f $_) -NoNewline}; Write-Host 

Для файла со следующим содержимым в формате Windows

One Two 

он отображает:

4f 6e 65 0d 0a 54 77 6f 0d 0a 

Обратите внимание на две последовательности 0d 0a(CR + LF), указывающие формат Windows.

Чтобы определить окончания строк, используемые файлом в системе Unix / Linux, используйте команду:

xxd example.txt | head 

(Альтернативы hexdump example.txt | headили od example.txt | head.)

Для того же файла, что и выше, только в формате Unix, он отображает:

0000000: 4f6e 650a 5477 6f0a One.Two. 

Обратите внимание на символ 0a(LF), обозначающий формат Unix.

Если у вас нет доступа оболочки к удаленной системе, загрузите файл с помощью двоичной кодировки и используйте команду PowerShell для локальной двоичной копии.

Используйте эти методы, чтобы определить, какой формат имеют исходные и конечные файлы. При редактировании файла определите также формат локальной временной копии отредактированного файла, сохраненный редактором. Смотрите настройки для размещения временных копий .

Запрос поддержки

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


(Я автор WinSCP)

1
knalle

No more double linebreaks here. My solution was to uncheck the "Force text transfer mode for files in external editor" in the editor preferences.

0
T.Todua

=== Мои единственные решения ===

Method1:

-Открыть файл (например, с помощью Notepad ++), открыть окно «Найти и заменить» [Ctrl + F] (установите флажок «Расширенный» в разделе «Режим поиска»), затем введите \ r \ n в первой строке и \ n в второй и нажмите «Заменить все» и Сохранить.

Method2:

- в « Настройки> Transer> Default » выберите « Автоматически (режим передачи) »;
- Затем в окне « Текст » задайте такие условия (но я их не проверял): enter image description here

Итак, теперь ваша проблема может быть исправлена. Многие люди имеют эту проблему, потому что новые строки удаляются по умолчанию (в некоторых случаях) с помощью WINSCP ..

Похожие вопросы