2012-04-19 19 views
15

मुझे आश्चर्य है कि फाइल को बाइनरी या ASCII के साथ Node.js के साथ जांचने का सबसे अच्छा तरीका क्या होगा? - लेकिन इस समय वह समस्या है, उदाहरण के लिए के रूप में पूर्व precessors अक्सर किसी मान्यता प्राप्त नहीं है है How to Check if File is ASCII or Binary in PHP:जांचें कि कोई फ़ाइल बाइनरी या ASCII Node.js के साथ है या नहीं?

  1. MIME प्रकार जाँच हो रही है:

    वहाँ Node.js के लिए विशिष्ट नहीं दो तरीके हो गया लगता है माइम प्रकार और जब उन्हें जाँच बाइट आकार की जाँच How to identify the file content as ASCII or binary साथ एक धारा बफर का उपयोग कर mime

  2. वाया का उपयोग कर application/octet-stream पर वापस लौटने - जो काफी गहन लगता है, और अभी तक एक Node.js उदाहरण प्रदान करता है।

तो क्या कोई और तरीका पहले से ही है? शायद एक गुप्त node.js कॉल या मॉड्यूल जो मुझे नहीं पता? या अगर मुझे यह करना है, तो किस तरह से सुझाव दिया जाएगा?

धन्यवाद

+0

क्या आप परिभाषित कर सकते हैं कि "बाइनरी फ़ाइल" से आपका क्या मतलब है? जिस तरह से आप परीक्षण करते हैं, उस पर निर्भर करता है कि आप क्या मतलब रखते हैं और कोई सार्वभौमिक रूप से सहमत परिभाषा नहीं है। –

+0

आइए एक छवि, या अधिक विशेष रूप से कुछ भी जो पाठ नहीं है कहें। उसके लिए माफ़ करना! – balupton

+0

यह वास्तव में पर्याप्त विशिष्ट नहीं है। आप जानकारी के साथ क्या करने की योजना बना रहे हैं? (क्या यह गैर-ASCII वर्णों के लिए पहले 8 केबी की जांच करने के लिए पर्याप्त होगा?) –

उत्तर

6

David Schwartz द्वारा इस प्रश्न पर टिप्पणियों के लिए धन्यवाद, मैंने इस समस्या को हल करने के लिए istextorbinary बनाया है।

+0

अपना अपडेट करने पर विचार करें सवाल करें कि क्या आपका इरादा सामान्य रूप से टेक्स्ट फ़ाइलों की पहचान करना था और विशेष रूप से ASCII एन्कोडिंग नहीं। – maerics

+5

इतनी कॉफ़ीक्रिप्ट क्यों? – Lodewijk

+13

कॉफ़ीस्क्रिप्ट लोगों को आसानी से पैच सबमिट करने से रोकता है। तो आपको ज्यादा बनाए रखने की ज़रूरत नहीं है। –

4

ASCII defines characters 0-127, इसलिए यदि एक फ़ाइल की सारी सामग्री को उस श्रेणी में बाइट मूल्यों हैं तो यह एक ASCII फ़ाइल माना जा सकता है।

function fileIsAscii(filename, callback) { 
    // Read the file with no encoding for raw buffer access. 
    require('fs').readFile(filename, function(err, buf) { 
    if (err) throw err; 
    var isAscii = true; 
    for (var i=0, len=buf.length; i<len; i++) { 
     if (buf[i] > 127) { isAscii=false; break; } 
    } 
    callback(isAscii); // true iff all octets are in [0, 127]. 
    }); 
} 
fileIsAscii('/usr/share/dict/words', function(x){/* x === true */}); 
fileIsAscii('/bin/ls', function(x){/* x === false */}); 

यदि प्रदर्शन महत्वपूर्ण है तो अपने लिंक किए गए उत्तर के अनुसार एक कस्टम सी ++ फ़ंक्शन लिखने पर विचार करें।