ไฟล์ข้อความเก็บวิธีการเข้ารหัสไว้เพื่อถอดรหัสในภายหลังหรือไม่?


19
  1. ฉันสงสัยว่าไฟล์ข้อความบางไฟล์เก็บวิธีการเข้ารหัสตามเนื้อหาข้อความไว้เพื่อถอดรหัสในภายหลังหรือไม่
  2. หรือเป็นหน้าที่ของผู้ดูข้อความในการเดาวิธีการเข้ารหัสสำหรับไฟล์ข้อความที่กำหนดและการคาดเดาอาจไม่ถูกต้องเสมอไป? ถ้าใช่ตัวแสดงข้อความจะเดาได้อย่างไร

ถ้ามันเป็นไฟล์ธรรมดาแล้วมันจะไม่เก็บอะไรเกี่ยวกับการเข้ารหัส แต่ฉันไม่สามารถพูดด้วยข้อความที่หลากหลายได้
Wuffers

ใช่ฉันกำลังพูดถึงธรรมดา
ทิม

คำตอบ:


19

ฉันสงสัยว่าไฟล์ข้อความบางไฟล์เก็บวิธีการเข้ารหัสตามเนื้อหาข้อความไว้เพื่อถอดรหัสในภายหลังหรือไม่

คำตอบของ Mark Szymanski นั้นถูกต้อง - ไม่มีข้อมูลการเข้ารหัสที่ชัดเจนในไฟล์ข้อความธรรมดา - นั่นคือคำจำกัดความของ "ไฟล์ข้อความธรรมดา", "ธรรมดา" หมายถึงข้อเท็จจริงที่ว่าไม่มีเมตาดาต้าในไฟล์

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

หรือเป็นหน้าที่ของผู้ดูข้อความในการเดาวิธีการเข้ารหัสสำหรับไฟล์ข้อความที่กำหนดและการคาดเดาอาจไม่ถูกต้องเสมอไป? ถ้าใช่ตัวแสดงข้อความจะเดาได้อย่างไร

ใช่โปรแกรมอ่านข้อความสามารถเดาได้เท่านั้น โดยปกติจะใช้การวิเคราะห์พฤติกรรมบางอย่าง:

  • ในการเข้ารหัสบางส่วน (โดยเฉพาะอย่างยิ่งใน UTF-8) ลำดับไบต์ทั้งหมดไม่ถูกต้อง ดังนั้นแอปพลิเคชันสามารถลองถอดรหัสไฟล์เป็น UTF-8 ได้ หากสำเร็จไฟล์อาจเป็น UTF-8 ถ้ามันล้มเหลวโดยการหาลำดับไบต์ที่ไม่ถูกต้องมันจะไม่ นี่คือวิธีการvimทำงานเช่นโดยค่าเริ่มต้น: มันจะพยายามใช้ UTF-8 ก่อนเมื่ออ่านไฟล์; หากล้มเหลวก็จะกลับไปที่ ISO-8859-1
  • ในการเข้ารหัส 8 บิตที่เก่ากว่าส่วนใหญ่ลำดับไบต์ใด ๆ ที่ถูกต้อง ในกรณีนี้บางครั้งคุณสามารถเดาการเข้ารหัสโดยดูที่ฮิสโทแกรมของไบต์ (ความถี่ของลำดับไบต์ / ไบต์ที่แตกต่างกัน) Internet Explorer เคยทำเช่นนี้เพื่อ "เดา" การเข้ารหัสของหน้า อย่างไรก็ตามนี่เป็นข้อผิดพลาดได้ง่ายดังนั้นโปรแกรมบางโปรแกรมจึงทำเช่นนี้

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


แล้วจะfile -biทำงานอย่างไรถ้าไม่ได้ใช้ BOM
แก่เก่า

@OldGeezer: fileมีการวิเคราะห์พฤติกรรมต่าง ๆ เพื่อกำหนดประเภทไฟล์และการเข้ารหัส ส่วนใหญ่จะมองหาสตริงที่แน่นอนหรือลำดับไบต์ในไฟล์ หากคุณต้องการข้อมูลที่เฉพาะเจาะจงมากขึ้นคุณอาจต้องอ่านแหล่งที่มา หรือเพียงแค่ถามคำถามแยกต่างหาก :-)
sleske

@OldGeezer: และ BTW fileไม่สามารถตรวจจับการเข้ารหัสข้อความส่วนใหญ่ได้อย่างน่าเชื่อถือ (เพราะมันยากมาก) หน้าคนมีข้อมูลบางอย่างเกี่ยวกับการตรวจจับชุดอักขระ - fileส่วนใหญ่รู้จัก ASCII, UTF-8/16, EBCDIC และ ISO-8859-x เท่านั้น ตัวอย่างเช่นไฟล์ที่เข้ารหัสใน KOI8-R ถูกรายงานว่า "ISO-8859-1"
sleske

4

ไฟล์ข้อความล้วนไม่เก็บข้อมูลใด ๆ เกี่ยวกับการเข้ารหัส วิวเวอร์พิจารณาตามการเข้ารหัสอักขระที่คุณตั้งไว้ ไม่สามารถระบุได้ด้วยตัวเองเนื่องจากมันเหมือนกันกับคอมพิวเตอร์


ดังนั้นโปรแกรมดูข้อความไม่สามารถแยกความแตกต่างระหว่างวิธีการเข้ารหัสสำหรับไฟล์ข้อความ หากโปรแกรมดูข้อความได้รับไฟล์ object / executable จะสามารถบอกได้ว่าไม่ใช่ไฟล์ข้อความหรือไม่?
ทิม

ไม่มันไม่สามารถ มันจะพยายามเปิดมันเหมือนไฟล์ข้อความ และแน่นอนจะแสดงสิ่งที่อ่านไม่ออก วิธีเดียวที่คุณจะได้รับมันเพื่อแยกความแตกต่างระหว่างการเข้ารหัสคือถ้าคุณเปลี่ยนการเข้ารหัสด้วยตนเอง
Wuffers

@Tim: โปรแกรมอ่านข้อความส่วนใหญ่ใช้ฮิวริสติกเพื่อตรวจสอบว่ามีบางสิ่งเป็นไฟล์ข้อความ หากไฟล์มีอักขระที่ไม่สามารถพิมพ์ได้จำนวนมากผู้ดูและผู้แก้ไขจำนวนมากจะเตือน (เช่นlessและgrepใน Unix / Linux ทำสิ่งนี้)
sleske
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.