5

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

this is line 1
this is line 2

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

this is line 1

this is line 2

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

4 ответа4

9

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

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

Бинарный перевод

редактор

3

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

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


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

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

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

Разные платформы (операционные системы) используют разные форматы текстовых файлов. Наиболее распространенными форматами являются Unix и Windows формат. Основное отличие состоит в том, что для обозначения конца строки используется другой символ или последовательность символов. В Unix это символ НЧ (\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 |% {Write-Host ("{0:x2} " -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)

0

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

Method1:

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

Method2:

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

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

0

Здесь больше нет двойных разрывов строк. Моим решением было снять флажок "Принудительный режим передачи текста для файлов во внешнем редакторе" в настройках редактора.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .