ASCII vs Nhị phân vs Tự động?


16

Tôi đang chuyển các tệp giữa các máy chủ và mới bắt đầu nhận thấy rằng một số trong số chúng đang được sửa đổi thành một dòng liên tục dài thay vì có trả về và ngắt dòng mà ban đầu chúng có. Tôi cho rằng điều này có liên quan đến loại chuyển đổi của Máy khách FTP của tôi ban đầu được đặt thành "Tự động", nhưng thể thao "Nhị phân" và "ASCII" là các tùy chọn bổ sung.

Nói tóm lại, sự khác biệt giữa các cách tôi chuyển tệp từ máy chủ này sang máy chủ khác và những khác biệt này có khả năng sửa đổi tệp theo cách như tôi đã đề cập ở trên không?

Chuyển giao TỪ của Windows ĐẾN Linux.

Câu trả lời:


27

Chế độ truyền "nhị phân" của FTP sao chép chính xác các tệp, byte cho byte. Đơn giản và dễ hiểu.

Tuy nhiên, khi mang các tệp văn bản giữa các hệ điều hành khác nhau, đây có thể không phải là điều bạn muốn - các hệ điều hành khác nhau sử dụng các mã khác nhau để thể hiện các ngắt dòng. Chế độ "ASCII" tồn tại cho mục đích này: nó tự động dịch tất cả các kết thúc dòng từ định dạng của hệ thống nguồn sang đích.

Không chắc chắn về "Tự động", nhưng tôi tưởng tượng rằng phần mở rộng của tệp hoặc một cái gì đó tương tự để quyết định xem đó có phải là tệp văn bản hay không và cố gắng đoán chế độ thích hợp.

Chế độ nào bạn muốn phụ thuộc vào chính xác những gì bạn đang làm với các tệp ... nếu bạn chỉ sao chép chúng để sao lưu chúng, thì có lẽ bạn sẽ muốn sao chép ở chế độ nhị phân để chúng giống hệt nhau khi bạn sau đó khôi phục chúng vào máy chủ windows một lần nữa. Nếu chúng cần có thể sử dụng dưới dạng tệp văn bản (có thể là tệp cấu hình cho chương trình đa nền tảng?) Ở cả hai bên, bạn sẽ muốn sử dụng chế độ ASCII để dịch chúng.

EDIT: Theo như tôi có thể nói, các tệp FTP từ Windows sang Linux sẽ không bao giờ dẫn đến việc ngắt dòng biến mất ... tuy nhiên , nếu bạn sao chép chúng ở chế độ ASCII, sau đó đưa chúng trở lại máy chủ Windows ở chế độ nhị phân, Linux kết thúc dòng kiểu có thể không được nhận ra trên hộp Windows. (Notepad sẽ không nhìn thấy chúng; Wordpad sẽ; YMMV với phần mềm khác.)

(Ngày nay, sự tiện lợi - tự động chuyển đổi kết thúc dòng - có vẻ kỳ quặc trong giao thức cơ bản như FTP. Tuy nhiên, khi FTP được phát minh, gửi tệp văn bản là chuẩn mực và một trong những mục tiêu của giao thức là thực hiện điều này càng dễ càng tốt.)


Mô tả tuyệt vời của cả hai. Tôi cảm thấy ít bối rối hơn bây giờ.
Sampson

cảm ơn bạn Tôi chưa bao giờ hiểu rõ quan điểm của chế độ ASCII đó và bây giờ tôi chắc chắn sẽ chỉ sử dụng chế độ nhị phân
Kiwy

3

Thực sự có sự khác biệt và chúng sẽ gây rối với việc chuyển tệp không phải văn bản của bạn trừ khi bạn sử dụng tùy chọn nhị phân - thường luôn sử dụng nếu ok :)


Có cách nào để khôi phục chúng? Hay đơn giản là tôi cần chuyển khoản với Binary ngay bây giờ để tránh điều này một lần nữa trong tương lai?
Sampson

Tôi chắc chắn rằng bạn có thể giải nén chúng nhưng có thể mất nhiều thời gian, tôi rất muốn được truyền lại chúng.
Chopper3

1

Hệ điều hành nào bạn đang chuyển tập tin đến / từ? Linux / Unix sử dụng các ngắt dòng khác nhau sau đó là Windows. Vì vậy, nếu bạn tạo một tệp trên máy tính linux và mở nó trên windows thì nó có thể trông lạ. Có những tiện ích để sửa lỗi này theo kinh nghiệm của tôi nếu bạn sử dụng wordpad trên windows thay vì notepad bạn sẽ ổn.


Tôi đang tạo ra những thứ này trên windows trong IDE, rồi chuyển chúng sang máy chủ linux. Vào một ngày sau đó, tôi mở chúng từ máy chủ linux để tìm dòng dài liên tục.
Sampson

Hãy thử chạy dos2unixvà xem nếu điều đó sửa các dòng
einstiien

1

Windows và Unix có các byte khác nhau ở cuối dòng (Windows a hex 0D 0A, Unix chỉ là 0A). Khi truyền tệp ở chế độ nhị phân, các byte của tệp sẽ được di chuyển từ một máy tính không thay đổi. Điều này là bắt buộc đối với các định dạng nhị phân (ví dụ: tệp ZIP, Hình ảnh, v.v.) nhưng có thể dẫn đến sự cố với tệp văn bản: Ví dụ: notepad.exe trên Windows sẽ hiển thị tệp văn bản chỉ bị ngắt dòng kiểu unix như một dòng dài, trình soạn thảo unix có thể hiển thị ^ M ở cuối mỗi dòng khi xem kiểu Windows.

Vì vậy, về mặt kỹ thuật đối với các định dạng nhị phân (zip, jpg, png và vô tận), bạn cần đặt FTP thành BINary, trong khi đối với các định dạng văn bản (HTML, PHP, CGI, v.v.), bạn cần đặt nó thành ASCII.

Hầu hết các chương trình FTP tốt cũng có cài đặt tự động, có nghĩa là chúng sẽ xác định chế độ (BINary hoặc ASCII) tùy thuộc vào các phần mở rộng tệp nổi tiếng, ví dụ: nó sẽ tự động chuyển việc chuyển tệp JPG sang BINary và gửi / nhận tệp PHP trong ASCII chế độ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.