Ascii mode ftp между двумя Linux-блоками делает нежелательный перевод CRLF


2

С помощью команды FTP я перенес XML-файл из коробки Red Hat Enterprise Linux, которая находится в Европе, в другую коробку RHEL в Соединенных Штатах. Я не указывал режим передачи, поэтому по умолчанию он был ASCII, который, насколько я понимаю, никогда не должен переводить символы между двумя блоками Linux, но он это сделал. Размер файла увеличился в месте назначения, и vim сообщил о нем как о файле DOS. Я проверил и LANG = en_US.UTF-8 на обеих машинах.

Кто-нибудь знает, почему произошел перевод этого символа?

Ответы:


1

Это именно то, что делает режим ASCII. Это переводит концы строк.

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

В наши дни вам вряд ли когда-нибудь понадобится режим ASCII. Особенно не для файлов XML.


Я думаю, что дело здесь в том, что это были две коробки Linux. Зачем переводить окончания строк в формат DOS?

1
@Troubadour: использование <CRLF> для окончания строки предшествует DOS. RFC 765 определил его для текстового режима ftp в 1980 году, примерно за год до того, как IBM PC впервые появился на рынке.

Да, это был вопрос.

0

RFC 959 говорит, что при отправке в режиме ASCII отправляющая сторона должна отправить файл в «стандартной форме» с концами строк CRLF, а «получатель преобразует данные из стандартной формы в свою собственную внутреннюю форму». (См. Раздел 3.1.1.1, Тип ASCII.)

Таким образом, похоже, что в вашем случае отправляющая сторона отправила файл с CRLF, потому что этого требует протокол FTP, а принимающая сторона по какой-то причине сохраняет их.

Я обнаружил следующую страницу, которая говорит, что по умолчанию FTP-сервер в Red Hat Enterprise Linux 3 и 4 делает вид, что разрешает режим ASCII, но в любом случае выполняет двоичную передачу: Почему FTP-серверу vsftp не удается передать файл в режиме ASCII, когда ASCII режим был установлен FTP-клиентом в Red Hat Enterprise Linux 3 и 4?

Так что это может объяснить, почему он держит CRLF-концы строк.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.