मैं एक फाइल फॉर्मेट को छोड़ रहा हूं और मैं इसे सही करना चाहता हूं। चूंकि यह एक बाइनरी स्वरूप है, फ़ाइल के पहले बाइट (या बाइट्स) चाहिए नहीं वैध शाब्दिक पात्रों के रूप में (सिर्फ PNG फ़ाइल शीर्षक में की तरह 1 )। यह उन टूल को अनुमति देता है जो प्रारूप को नहीं पहचानते हैं फिर भी यह देखते हैं कि इसकी टेक्स्ट फाइल पहले कुछ बाइट्स को देखकर नहीं है।
ऊपर दिया गया कोई भी कोडपॉइंट 0x7F
US-ASCII अमान्य है, इसलिए यह आसान है। लेकिन यूनिकोड के लिए यह एक अलग कहानी है। मान्य यूनिकोड वर्णों के अलावा, निजी-उपयोग वाले वर्ण , गैर - प्रेषक और प्रहरी हैं , जैसा कि मैंने यूनिकोड निजी-उपयोग वर्ण, गैर-अक्षर और प्रहरी में पाया ।
बाइट्स का एक प्रहरी क्रम क्या होगा जिसे मैं उस फ़ाइल के प्रारंभ में उपयोग कर सकता हूं जिसके परिणामस्वरूप अमान्य US-ASCII, UTF-8, UTF-16LE और UTF-16BE होंगे?
- स्पष्ट रूप से पहले बाइट का मूल्य नीचे नहीं हो सकता है
0x80
क्योंकि यह एक वैध यूएस-एएससीआईआई (नियंत्रण) चरित्र होगा, इसलिए0x00
इसका उपयोग नहीं किया जा सकता है। - साथ ही, चूंकि निजी-उपयोग वाले पात्र यूनिकोड वर्ण हैं, इसलिए मैं उन कोडपॉइंट का उपयोग नहीं कर सकता।
- के बाद से इसके साथ काम करना चाहिए दोनों छोटे-endian और बड़े endian UTF-16, एक noncharacter जैसे
0xFFFE
भी संभव नहीं है के रूप में अपनी रिवर्स0xFEFF
एक वैध यूनिकोड वर्ण है। - उपर्युक्त अक्सर पूछे जाने वाले प्रश्न किसी भी गैर-लाभार्थी का उपयोग नहीं करने का सुझाव देते हैं, जिसके परिणामस्वरूप अभी भी एक वैध यूनिकोड अनुक्रम होगा, इसलिए ऐसा कुछ
0xFFFF
चित्र से बाहर भी है।
भविष्य के प्रूफ प्रहरी मूल्य क्या होंगे जो मेरे उपयोग के लिए बचे हैं?
1 ) पीएनजी प्रारूप में गैर-एएससीआईआई 0x89
मूल्य के पहले बाइट के रूप में है , इसके बाद स्ट्रिंग है PNG
। पीएनजी के पहले कुछ बाइट्स को पढ़ने वाला एक उपकरण यह निर्धारित कर सकता है कि यह एक द्विआधारी फ़ाइल है क्योंकि यह व्याख्या नहीं कर सकता है 0x89
। दूसरी ओर, एक GIF फ़ाइल, सीधे मान्य और पठनीय ASCII स्ट्रिंग के साथ शुरू होती है और GIF
उसके बाद तीन और मान्य ASCII वर्ण होते हैं। GIF के लिए एक उपकरण यह निर्धारित कर सकता है कि यह एक पठनीय पाठ फ़ाइल है। यह गलत है और एक गैर-पाठीय बाइट अनुक्रम के साथ फाइल शुरू करने का विचार एंडी मैकफर्डन द्वारा डिजाइनिंग फ़ाइल स्वरूपों से आया है ।
GIF8
। एक SGI movi फ़ाइल के साथ शुरू होता है MOVI
। ज़िप संग्रह फ़ाइल की एक शैली के साथ शुरू होता है ZZ
, और अधिक लोकप्रिय pkzip प्रारूप के साथ शुरू होता है PK
। बाधा है कि पहली बाइट एक अमान्य पाठ चरित्र है जो जंगली में पाया जाता है से मेल नहीं खाती है। मैं उत्सुक हूं कि यह एक आवश्यकता क्यों है।
Since it is a binary format, the first bytes of the file should not form valid textual characters
- आपको मैजिक फाइल (/ usr / share / मैजिक, या / etc / मैजिक को कई यूनिक्स सिस्टम) पर देखना चाहिए जो दिखाता है कि यह एप्लिकेशन फ़ाइल प्रकारों की पहचान कैसे करता है। एक PNG फ़ाइल के साथ शुरू होता है\x89PNG\x0d\0a\x1a\x0a
- वहाँ "PNG" पर ध्यान दें, यह एक कच्चा स्ट्रिंग है। अनुक्रम\x89
और पसंद गैर-प्रिंट करने योग्य बाइट्स हैं।