ASCII กับ Binary vs Auto?


16

ฉันกำลังถ่ายโอนไฟล์ระหว่างเซิร์ฟเวอร์และเพิ่งเริ่มสังเกตเห็นว่าบางส่วนของพวกเขาได้รับการแก้ไขให้เป็นหนึ่งบรรทัดต่อเนื่องเป็นเวลานานเมื่อเทียบกับการมีผลตอบแทนและตัวแบ่งบรรทัดที่พวกเขามี ฉันสมมติว่าสิ่งนี้เกี่ยวข้องกับการโอนย้ายประเภทไคลเอนต์ FTP ของฉันซึ่ง แต่เดิมตั้งค่าเป็น "อัตโนมัติ" แต่ใช้ "Binary" และ "ASCII" เป็นตัวเลือกเพิ่มเติม

ในระยะสั้นความแตกต่างระหว่างวิธีที่ฉันถ่ายโอนไฟล์จากเซิร์ฟเวอร์หนึ่งไปยังอีกเซิร์ฟเวอร์หนึ่งคืออะไรและความแตกต่างเหล่านี้จะสามารถแก้ไขไฟล์ในแบบที่ฉันได้กล่าวไว้ข้างต้นได้อย่างไร

โอนจาก Windows ไปยัง Linux

คำตอบ:


27

โหมดการถ่ายโอน "Binary" ของ FTP จะทำสำเนาไฟล์ทุกประการเป็นไบต์สำหรับไบต์ เรียบง่ายและตรงไปตรงมา

เมื่อนำไฟล์ข้อความระหว่างระบบปฏิบัติการที่แตกต่างกันสิ่งนี้อาจไม่ใช่สิ่งที่คุณต้องการ - ระบบปฏิบัติการที่แตกต่างกันใช้รหัสที่ต่างกันเพื่อแสดงตัวแบ่งบรรทัด โหมด "ASCII" มีอยู่เพื่อจุดประสงค์นี้: มันจะแปลการจบบรรทัดทั้งหมดโดยอัตโนมัติจากรูปแบบของระบบต้นทางเป็นปลายทาง

ไม่แน่ใจเกี่ยวกับ "อัตโนมัติ" แต่ฉันคิดว่าดูเหมือนว่าส่วนขยายของไฟล์หรือสิ่งที่คล้ายกันเพื่อตัดสินใจว่าเป็นไฟล์ข้อความและพยายามคาดเดาโหมดที่เหมาะสม

โหมดใดที่คุณต้องการขึ้นอยู่กับสิ่งที่คุณกำลังทำกับไฟล์ ... หากคุณเพียงแค่คัดลอกพวกเขาเพื่อสำรองพวกเขาแล้วคุณอาจต้องการคัดลอกในโหมดไบนารีดังนั้นพวกเขาจะเหมือนกันเมื่อ คุณคืนค่าพวกเขาไปยังเซิร์ฟเวอร์ windows อีกครั้ง หากพวกเขาจำเป็นต้องใช้งานเป็นไฟล์ข้อความ (อาจเป็นไฟล์กำหนดค่าสำหรับโปรแกรมข้ามแพลตฟอร์ม?) ทั้งสองด้านคุณจะต้องใช้โหมด ASCII เพื่อแปลพวกเขา

แก้ไข:เท่าที่ฉันสามารถบอกได้ FTP ไฟล์จาก Windows ไปยัง Linux ไม่ควรส่งผลให้การแบ่งบรรทัดหายไป ... อย่างไรก็ตามถ้าคุณคัดลอกในโหมด ASCII แล้วนำกลับไปยังเซิร์ฟเวอร์ Windows ในโหมดไบนารี Linux - จุดสิ้นสุดของบรรทัดสไตล์อาจไม่เป็นที่รู้จักบนกล่อง Windows (Notepad จะไม่เห็นพวกเขา Wordpad จะ; YMMV พร้อมซอฟต์แวร์อื่น)

(วันนี้ความสะดวกสบาย - การแปลงจุดสิ้นสุดบรรทัดโดยอัตโนมัติ - อาจดูแปลกในโปรโตคอลพื้นฐานเช่น FTP เมื่อ FTP ถูกคิดค้นแม้ว่าการส่งไฟล์ข้อความเป็นบรรทัดฐานและหนึ่งในเป้าหมายของโปรโตคอลคือการทำให้ ง่ายที่สุดเท่าที่จะทำได้)


คำอธิบายที่ยอดเยี่ยมของทั้งสอง ตอนนี้ฉันรู้สึกสับสนน้อยลง
Sampson

ขอบคุณฉันไม่เคยเข้าใจจุดของโหมด ASCII นั้นและตอนนี้ฉันจะใช้เฉพาะโหมดไบนารีเท่านั้น
Kiwy

3

มีความแตกต่างแน่นอนและพวกเขาจะยุ่งกับการถ่ายโอนไฟล์ที่ไม่ใช่ข้อความธรรมดาของคุณจนกว่าคุณจะใช้ตัวเลือกไบนารี - โดยทั่วไปจะใช้ถ้าตกลง :)


ไม่มีวิธีใดที่จะคืนค่าเหล่านี้หรือไม่ หรือฉันจะต้องถ่ายโอนกับไบนารีทันทีเพื่อหลีกเลี่ยงปัญหานี้อีกในอนาคต?
Sampson

ฉันแน่ใจว่าคุณสามารถแก้ไขได้ แต่อาจใช้เวลานานฉันจะถูกล่อลวงให้ส่งสัญญาณซ้ำ
Chopper3

1

ระบบปฏิบัติการใดที่คุณถ่ายโอนไฟล์ไป / มา? Linux / Unix ใช้ตัวแบ่งบรรทัดต่างจากนั้นใช้ Windows ดังนั้นถ้าคุณสร้างไฟล์บนคอมพิวเตอร์ linux และเปิดมันบน windows มันอาจดูแปลก มีสาธารณูปโภคเพื่อแก้ไขสิ่งนี้แม้ว่าในประสบการณ์ของฉันถ้าคุณใช้ wordpad บน windows แทนที่จะเป็นแผ่นจดบันทึกคุณจะไม่เป็นอะไร


ฉันกำลังเขียนสิ่งเหล่านี้บน windows ใน IDE จากนั้นย้ายไปยังเซิร์ฟเวอร์ linux ในภายหลังฉันเปิดจากเซิร์ฟเวอร์ linux เพื่อค้นหาบรรทัดต่อเนื่องที่ยาว
จอห์น

ลองใช้dos2unixและดูว่าแก้ไขบรรทัดได้หรือไม่
einstiien

1

Windows และ Unix มีไบต์ที่แตกต่างกันที่ส่วนท้ายของบรรทัด (Windows a 0D 0A hex, Unix เพียงแค่ 0A) เมื่อทำการถ่ายโอนไฟล์ในโหมด Binary ไบต์ของไฟล์จะถูกย้ายจากคอมพิวเตอร์เครื่องหนึ่งไม่เปลี่ยนแปลง สิ่งนี้จำเป็นสำหรับรูปแบบไบนารี่ (เช่นไฟล์ ZIP, รูปภาพ, ฯลฯ ) แต่สามารถนำไปสู่ปัญหาเกี่ยวกับไฟล์ข้อความ: เช่น notepad.exe บน Windows จะแสดงไฟล์ข้อความที่มีตัวแบ่งบรรทัดสไตล์ unix เพียงหนึ่งบรรทัดเป็นตัวแก้ไข unix อาจแสดง ^ M ที่ส่วนท้ายของทุกบรรทัดเมื่อเห็นสไตล์ Windows

ดังนั้นในทางเทคนิคสำหรับรูปแบบไบนารี่ (zip, jpg, png และอื่น ๆ ไม่มีที่สิ้นสุด) คุณจำเป็นต้องตั้งค่า FTP เป็น BINARY ในขณะที่สำหรับรูปแบบข้อความ (HTML, PHP, CGI, ฯลฯ ) คุณต้องตั้งค่าเป็น ASCII

โปรแกรม FTP ที่ดีส่วนใหญ่มีการตั้งค่าอัตโนมัติซึ่งหมายความว่าพวกเขาจะกำหนดโหมด (BINARY หรือ ASCII) ขึ้นอยู่กับนามสกุลไฟล์ที่รู้จักกันดีเช่นมันจะสลับการถ่ายโอนไฟล์ JPG เป็น BINARY โดยอัตโนมัติและส่ง / รับไฟล์ PHP ใน ASCII โหมด.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.