दिलचस्प पोस्ट
उप-प्रकार या नहीं उपयोग करने के लिए डीबी डिजाइन? कोड इग्नेटर में हैडर और पादलेख UINavigationBar में UIBarButtonItem की स्थिति बदलें एक enum के भीतर इन # परिभाषा का उद्देश्य क्या है? सी # का उपयोग कर किसी श्रेणी में एक यादृच्छिक संख्या का निर्माण करें डीजेंगओ साइट में पीडीएफ़ को एचडीएमएल प्रस्तुत करना मैं बच्चे से एक मूल वापस माता पिता के रूप में कैसे पास कर सकता हूं? कैसे उल्का का उपयोग कर एक शोकहारा वेब सेवा का पर्दाफाश करने के लिए jQuery ओवरराइड डिफ़ॉल्ट सत्यापन त्रुटि संदेश प्रदर्शन (सीएसएस) पॉपअप / टूलटिप जैसे कीजिए उद्देश्य-सी में NSMutableArray से डुप्लिकेट मानों को निकालने का सबसे अच्छा तरीका है? va_list का उपयोग करके printf को कॉल करें जावा में अलग रिटर्न प्रकार के साथ अधिभार? स्ट्रिंग्स को स्टोर करने के लिए डेटा टाइप "टेक्स्ट" का उपयोग करने की कोई डाउनसाइड्स? पायथन ने व्याख्या की है, या संकलित, या दोनों? दो-तरफ़ा एन्क्रिप्शन: मुझे ऐसे पासवर्ड संग्रहीत करने की आवश्यकता होती है जिन्हें पुनर्प्राप्त किया जा सकता है

ASCII या बाइनरी के रूप में फ़ाइल सामग्री की पहचान कैसे करें

सी ++ का उपयोग करके एएससीआईआई या बाइनरी में होने वाली फ़ाइल की सामग्री की पहचान कैसे की जाती है?

वेब के समाधान से एकत्रित समाधान "ASCII या बाइनरी के रूप में फ़ाइल सामग्री की पहचान कैसे करें"

यदि एक फ़ाइल में केवल दशमलव बाइट्स 9-13, 32-126, तो यह संभवतः एक शुद्ध एएससीआईआई पाठ फ़ाइल है। अन्यथा, यह नहीं है। हालांकि, यह अभी भी अन्य एन्कोडिंग में पाठ हो सकता है

अगर, उपर्युक्त बाइट्स के अतिरिक्त , फ़ाइल में केवल दशमलव बाइट्स 128-255 होती है, शायद यह 8-बिट या चर-लंबाई एएससीआईआई-आधारित एन्कोडिंग जैसे कि आईएसओ -8859-1, यूटीएफ -8 या एक पाठ फ़ाइल है ASCII + बिग 5। यदि नहीं, तो कुछ उद्देश्यों के लिए आप यहां रोक सकते हैं और फ़ाइल को द्विआधारी समझते हैं। हालांकि, यह अभी भी एक 16- या 32-बिट एन्कोडिंग में पाठ हो सकता है।

यदि कोई फ़ाइल ऊपर की बाधाओं को पूरा नहीं करती है, तो बाइट-ऑर्डर चिह्न के लिए फ़ाइल के पहले 2-4 बाइट्स की जांच करें :

  • यदि पहले दो बाइट हेक्स FE FF , तो फ़ाइल यूटीएफ -16 बीई है।
  • यदि पहले दो बाइट हेक्स FF FE , और निम्नलिखित दो बाइट्स हेक्स 00 00 नहीं हैं, तो फ़ाइल असल में यूटीएफ -16 LE है।
  • अगर पहले चार बाइट्स हेक्स 00 00 FE FF , तो फ़ाइल यूटीएफ -32 बीई है।
  • यदि पहले चार बाइट हेक्स FF FE 00 00 , तो फाइल यूटीएफ -32 LE के स्थान पर है।

यदि, उपरोक्त चेक के जरिए, आपने एक अस्थायी एन्कोडिंग निर्धारित किया है, तो नीचे दिए गए संकेतन एन्कोडिंग के लिए केवल यह जांचें कि यह फाइल बाइनरी फ़ाइल नहीं है जो एक बाइट-ऑर्डर चिह्न से मेल खाता होती है

यदि आपने एक अस्थायी एन्कोडिंग निर्धारित नहीं किया है, तो फ़ाइल इन एन्कोडिंग में से किसी एक में भी एक टेक्स्ट फ़ाइल हो सकती है, चूंकि बाइट-ऑर्डर चिह्न अनिवार्य नहीं है, इसलिए निम्न सूची में सभी एन्कोडिंग की जांच करें:

  • यदि फ़ाइल में दशमलव मूल्य 9-13, 32-126, और 128 या उससे अधिक के साथ केवल बड़े-एन्डियन दो-बाइट शब्द हैं, तो फ़ाइल शायद यूटीएफ -16 बीई है।
  • यदि फ़ाइल में दशमलव मूल्य 9-13, 32-126, और 128 या उससे अधिक के साथ केवल छोटे-एंडियन दो-बाइट शब्द हैं, तो फ़ाइल शायद यूटीएफ -16 ले है।
  • यदि फ़ाइल में दशमलव मानों 9-13, 32-126, और 128 या उससे अधिक के साथ केवल बड़े-अंत वाले चार-बाइट शब्द हैं, तो फ़ाइल शायद यूटीएफ -32 बीई है।
  • यदि फ़ाइल में दशमलव मूल्य 9-13, 32-126, और 128 या उससे अधिक के साथ केवल छोटे-एंडियन चार-बाइट शब्द हैं, तो फ़ाइल संभवत: UTF-32 LE है।

अगर, इन सभी जांचों के बाद, अब भी आपने एक एन्कोडिंग निर्धारित नहीं किया है, तो फ़ाइल किसी एएससीआईआई-आधारित एन्कोडिंग में कोई पाठ फ़ाइल नहीं है, इसलिए मैं ज्यादातर जानकारियों के लिए आप इसे बाइनरी मान सकते हैं (यह अभी भी हो सकता है एक गैर-एएससीआईआई एन्कोडिंग जैसे ईबीसीडीआईसी में एक पाठ फ़ाइल हो, लेकिन मुझे संदेह है कि यह आपकी चिंता के दायरे से बाहर है)।

आप stream.get () के साथ सामान्य लूप का उपयोग करके इसे पुनरावृत्त करते हैं, और जांचें कि आपने जो बाइट मूल्य पढ़ा है वह <= 127 । ऐसा करने के कई तरीके का एक तरीका:

 int c; std::ifstream a("file.txt"); while((c = a.get()) != EOF && c <= 127) ; if(c == EOF) { /* file is all ASCII */ } 

हालांकि, जैसा कि किसी व्यक्ति का उल्लेख है, सभी फाइलें बाइनरी फ़ाइलें सभी के बाद हैं इसके अतिरिक्त, यह स्पष्ट नहीं है कि आप "एस्सी" से क्या मतलब है यदि आप वर्ण कोड का मतलब है, तो वास्तव में यह आप जिस तरह से जाते हैं लेकिन अगर आप केवल अल्फ़ान्यूमेरिक मानों का मतलब है, तो आपको जाने के लिए एक अन्य तरीके की आवश्यकता होगी।

मेरा टेक्स्ट एडिटर रिक्त बाइट्स की उपस्थिति पर फैसला करता है। व्यवहार में, जो वास्तव में अच्छी तरह से काम करता है: शून्य बाइट्स के साथ एक बाइनरी फ़ाइल अत्यंत दुर्लभ है।

फ़ाइल कमान कैसे काम करता है, यह एक नज़र डालें; इसमें फ़ाइल के प्रकार को निर्धारित करने के लिए तीन रणनीतियों हैं:

  • फाइलसिस्टम परीक्षण
  • जादू संख्या परीक्षण
  • और भाषा परीक्षण

आपके प्लेटफ़ॉर्म, और जिन संभावित फाइलों में रुचि है, उनके आधार पर, आप इसके कार्यान्वयन को देख सकते हैं या इसे भी खोल सकते हैं

प्रत्येक फाइल की सामग्री बाइनरी है तो, कुछ और जानने के लिए, आप सुनिश्चित नहीं हो सकते।

एएससीआईआई व्याख्या की बात है यदि आप पाठ संपादक में एक बाइनरी फ़ाइल खोलते हैं, तो आप देखें कि मेरा क्या मतलब है।

अधिकांश बाइनरी फ़ाइलों में एक निश्चित हैडर (प्रति प्रकार) होता है जिसे आप देख सकते हैं, या आप फ़ाइल एक्सटेंशन को एक संकेत के रूप में ले सकते हैं। यदि आप यूटीएफ-एन्कोडेड फाइलों की अपेक्षा करते हैं तो आप बाइट ऑर्डर के निशान देख सकते हैं, लेकिन वे वैकल्पिक भी हैं।

जब तक आप अपने प्रश्न को अधिक बारीकी से परिभाषित नहीं करते, तब तक एक निश्चित जवाब नहीं हो सकता।

यदि प्रश्न यथार्थ रूप से केवल एएससीआईआई का पता लगाने के लिए है, तो litb का उत्तर स्पॉट ऑन है हालांकि अगर सैन यह जानने के बाद कि फाइल में टेक्स्ट है या नहीं, तो यह समस्या अधिक जटिल हो जाती है। एएससीआईआई सिर्फ एक – बढ़ते अलोकप्रिय – पाठ का प्रतिनिधित्व करने का तरीका है यूनिकोड सिस्टम – यूटीएफ 16, यूटीएफ 32 और यूटीएफ 8 लोकप्रियता में उगाए गए हैं। सिद्धांत में, वे आसानी से जांच कर सकते हैं कि पहले दो बाइट्स यूनिकोकडे बाइट ऑर्डर मार्क (बीओएम) 0xFEFF (या 0xFFFE यदि बाइट ऑर्डर उलट है) हैं। हालांकि, जैसा कि उन दो बाइट्स ने लिनक्स सिस्टम के लिए कई फ़ाइल स्वरूपों को पेंच किया, वे वहां होने की गारंटी नहीं दे सकते। इसके अलावा, एक बाइनरी फ़ाइल 0xFEFF से शुरू हो सकती है

0x00 के (या अन्य नियंत्रण वर्णों) की खोज में मदद नहीं मिलेगी, अगर फ़ाइल यूनिकोड है यदि फ़ाइल UFT16 है, और फ़ाइल में अंग्रेज़ी पाठ है, तो प्रत्येक दूसरे अक्षर 0x00 होगा।

यदि आप भाषा जानते हैं कि पाठ फ़ाइल में लिखा जाएगा, तो बाइट्स का विश्लेषण करना संभव होगा और सांख्यिकीय रूप से यह निर्धारित होगा कि इसमें पाठ है या नहीं। उदाहरण के लिए, अंग्रेजी में सबसे आम पत्र ई होता है टी के बाद। तो अगर फ़ाइल में बहुत अधिक ई और टी ज़ेड और एक्स की तुलना में बहुत अधिक है, तो यह संभवतः पाठ है बेशक यह एएससीआईआई और विभिन्न यूनिकोड के रूप में यह सुनिश्चित करने के लिए आवश्यक होगा कि यह सुनिश्चित करें।

यदि फ़ाइल अंग्रेजी में नहीं लिखा है – या आप कई भाषाओं का समर्थन करना चाहते हैं – तो केवल दो विकल्प बाईं ओर विंडोज़ पर फ़ाइल एक्सटेंशन को देखने और "जादू फ़ाइल" कोड के एक डेटाबेस के खिलाफ पहले चार बाइट्स को देखने के लिए हैं फ़ाइल प्रकार को निर्धारित करें और इस प्रकार यह कि क्या इसमें पाठ है या नहीं

ठीक है, यह आपके एएससीआईआई की परिभाषा पर निर्भर करता है। आप या तो एएससीआईआई कोड <128 या कुछ वर्णसेट के साथ मानों की जांच कर सकते हैं (जैसे 'ए' – 'जेड', 'ए' – 'जेड', '0' – '9' …) और फ़ाइल का इलाज बाइनरी के रूप में अगर इसमें कुछ अन्य वर्ण शामिल हैं

आप पाठ फ़ाइलों को खोजने के लिए नियमित लाइनब्रेक (0x10 या 0x13,0x10) की जांच भी कर सकते हैं।

जांचने के लिए, आपको फ़ाइल को द्विआधारी के रूप में खोलना होगा। आप फ़ाइल को पाठ के रूप में नहीं खोल सकते एएससीआईआई प्रभावी ढंग से द्विआधारी का एक सबसेट है इसके बाद, आपको बाइट मूल्यों की जांच करनी होगी। एएससीआईआई के बाइट मूल्य 0-127 हैं, लेकिन 0-31 नियंत्रण अक्षर हैं। टैब, सीआर और एलएफ़ केवल सामान्य नियंत्रण वर्ण हैं। आप (पोर्टेबल) 'ए' और 'जेड' का उपयोग नहीं कर सकते हैं; इसमें कोई गारंटी नहीं है कि वे एएससीआईआई (!) में हैं यदि आपको उनकी आवश्यकता है, तो आपको परिभाषित करना होगा

 const unsigned char ASCII_A = 0x41; // NOT 'A' const unsigned char ASCII_Z = ASCII_A + 25; 

इस प्रश्न का वास्तव में कोई सही या गलत जवाब नहीं है, बस जटिल समाधान जो सभी संभव टेक्स्ट फाइलों के लिए काम नहीं करेंगे

यहां एक पुरानी न्यू थिंग आर्टिकल लिंक है, जिस पर नोटपैड की आस्की फ़ाइल का प्रकार पता लगा है। यह सही नहीं है, लेकिन यह देखना दिलचस्प है कि माइक्रोसॉफ्ट इसे किस तरह से संभालते हैं।

गिथूब के लिनग्यिआई ने बाल्करी फाइलों का पता लगाने के लिए चारलोक होम्स का इस्तेमाल किया है , जो बदले में आईसीयू के वर्णसेट का पता लगाता है।

आईसीयू पुस्तकालय सी और जावा सहित कई प्रोग्रामिंग भाषाओं के लिए उपलब्ध है