ฉัน desiging รูปแบบไฟล์และต้องการทำถูกต้อง เนื่องจากเป็นรูปแบบไบนารีดังนั้นไบต์แรก (หรือไบต์) ของไฟล์จึงไม่ควรมีรูปแบบข้อความที่ถูกต้อง (เช่นเดียวกับในส่วนหัวของไฟล์ PNG 1 ) วิธีนี้ช่วยให้เครื่องมือที่ไม่รู้จักรูปแบบยังคงเห็นว่าไม่ใช่ไฟล์ข้อความโดยดูที่สองสามไบต์แรก
codepoint ด้านบนใด ๆ0x7F
นั้นไม่ถูกต้อง US-ASCII ดังนั้นจึงเป็นเรื่องง่าย แต่สำหรับ Unicode มันเป็นเรื่องที่แตกต่างกันโดยสิ้นเชิง นอกเหนือจากตัวอักษร Unicode ที่ถูกต้องมีตัวอักษรส่วนตัวการใช้งาน , noncharactersและยามรักษาการณ์ที่ผมพบในUnicode เอกชนใช้ตัวอักษร, Noncharacters และยามรักษาการณ์คำถามที่พบบ่อย
อะไรคือลำดับของ Sentinel ของไบต์ที่ฉันสามารถใช้เมื่อเริ่มต้นไฟล์ซึ่งจะทำให้ US-ASCII, UTF-8, UTF-16LE และ UTF-16BE ที่ไม่ถูกต้อง
- เห็นได้ชัดว่าไบต์แรกไม่สามารถมีค่าด้านล่างได้
0x80
เนื่องจากจะเป็นอักขระ US-ASCII (ตัวควบคุม) ที่ถูกต้องดังนั้นจึง0x00
ไม่สามารถใช้งานได้ - นอกจากนี้เนื่องจากอักขระที่ใช้งานส่วนตัวเป็นอักขระ Unicode ที่ถูกต้องฉันจึงไม่สามารถใช้ codepoints เหล่านั้นได้เช่นกัน
- เนื่องจากมันจะต้องทำงานกับทั้ง UTF-16 และend -little-endian, noncharacterเช่น
0xFFFE
นั้นเป็นไปไม่ได้เนื่องจาก reverse ของมัน0xFEFF
เป็นอักขระ Unicode ที่ถูกต้อง - คำถามที่พบบ่อยที่กล่าวถึงข้างต้นไม่แนะนำให้ใช้อักขระที่ไม่ใช่ตัวอักษรใด ๆเนื่องจากจะยังคงมีลำดับ Unicode ที่ถูกต้องดังนั้นสิ่งที่คล้ายกัน
0xFFFF
นี้ก็ไม่อยู่ในภาพ
สิ่งที่จะเป็นค่ารักษาการณ์ในอนาคตที่ฉันจะใช้?
1 ) รูปแบบ PNG ได้เป็นไบต์แรกมากของมันไม่ใช่ ASCII ค่าตามด้วยสตริง0x89
PNG
เครื่องมือที่อ่านไม่กี่ไบต์แรกของ PNG อาจพิจารณาว่าเป็นไฟล์ไบนารีเนื่องจากไม่สามารถตีความ0x89
ได้ ในทางกลับกันไฟล์ GIF จะเริ่มต้นโดยตรงด้วยสตริง ASCII ที่ถูกต้องและอ่านได้GIF
แล้วตามด้วยอักขระ ASCII ที่ถูกต้องอีกสามตัว สำหรับ GIF เครื่องมืออาจพิจารณาว่าเป็นไฟล์ข้อความที่สามารถอ่านได้ นี่เป็นสิ่งที่ผิดและแนวคิดในการเริ่มต้นไฟล์ด้วยลำดับไบต์ที่ไม่ใช่เนื้อสัมผัสมาจากการออกแบบรูปแบบไฟล์โดย Andy McFadden
GIF8
เริ่มต้นด้วย ไฟล์ SGI Movi MOVI
เริ่มต้นด้วย หนึ่งรูปแบบของไฟล์ไฟล์ zip ที่เริ่มต้นด้วยZZ
รูปแบบที่นิยมมากขึ้น PKZIP PK
เริ่มต้นด้วย ข้อ จำกัด ที่ไบต์แรกเป็นอักขระข้อความที่ไม่ถูกต้องดูเหมือนจะไม่ตรงกับสิ่งที่พบใน wild ฉันอยากรู้ว่าทำไมนี่เป็นข้อกำหนด
Since it is a binary format, the first bytes of the file should not form valid textual characters
- คุณควรดูไฟล์มายากล (/ usr / share / magic หรือ / etc / magic บนระบบยูนิกซ์หลายระบบ) ที่แสดงว่าแอปพลิเคชันนี้ระบุประเภทไฟล์อย่างไร ไฟล์ PNG เริ่มต้นด้วย\x89PNG\x0d\0a\x1a\x0a
- สังเกต "PNG" ในนั้นนั่นคือสตริงดิบ ลำดับ\x89
และสิ่งที่คล้ายกันคือไบต์ที่ไม่สามารถพิมพ์ได้