दिलचस्प पोस्ट
SQL सर्वर 2008 में हस्तांतरण लॉग को कैसे देखें Symfony2 / Symfony3 में FOSUserBundle का उपयोग करके उपयोगकर्ता नाम फ़ील्ड को हटाएं / बदलें जावा में तरीके बनाम कन्स्ट्रक्टर्स हास्केल क्लास की परिभाषा में "|" क्या है? स्टोरीबोर्ड के बिना एक्सकोड 6 में रिक्त एप्लिकेशन कैसे बनाएं सी # वेब ब्राउजर अजाक्स कॉल स्क्रीनएक्स / वाई, क्लाइंट एक्स / वाई और पेजएक्स / वाई में अंतर क्या है? स्ट्रिंग को एक चर नाम पर कनवर्ट करें इंस्टेंस नए टाइप (गोलंग) आर में एक उपयोगी डेटा फ्रेम में विभिन्न लंबाई के सदिश की सूची को कैसे परिवर्तित करें? मीटिंग को प्रकाशित करना / सदस्यता लें JQuery के साथ सीएसएस वर्ग गुणों को बदलें जावा HttpURL कनेक्शन यातायात के लिए वायर लॉगिंग को कैसे सक्षम करें? JasperReports में स्थिति के आधार पर टेक्स्ट फ़ील्ड डेटा रंग (अग्रभूमि रंग) बदलें एंड्रॉइड एमुलेटर प्रारंभ नहीं हो रहा है, "अमान्य कमांड-लाइन पैरामीटर" दिखा रहा है

एचटीएमएलएफ़ फ़ाइल एपीआई पाठ और बाइनरी के रूप में पढ़ा जाता है

मैं वर्तमान में HTML5 फ़ाइल एपीआई पर काम कर रहा हूं, और मुझे बाइनरी फ़ाइल डेटा प्राप्त करने की आवश्यकता है। The FileReader का readAsText , और readAsDataURL विधियां ठीक काम करती हैं, लेकिन readAsBinaryString समान डेटा को readAsText रूप में readAsText

मुझे द्विआधारी डेटा की आवश्यकता है, लेकिन एक पाठ स्ट्रिंग प्राप्त करने के लिए I क्या मैं कुछ भूल रहा हूँ?

Solutions Collecting From Web of "एचटीएमएलएफ़ फ़ाइल एपीआई पाठ और बाइनरी के रूप में पढ़ा जाता है"

readAsBinaryString कहता है कि डेटा को बाइनरी स्ट्रिंग के रूप में प्रस्तुत किया जाना चाहिए, जहां:

… प्रत्येक बाइट की श्रेणी में एक पूर्णांक द्वारा दर्शाया गया है [0. 255]।

जावास्क्रिप्ट मूल रूप से "द्विआधारी" प्रकार नहीं था (जब तक ईसीएमएस्क्रिप्ट 5 के टाइपिंग ऐरे * के विवरण के लिए वेबजीएल समर्थन (नीचे विवरण) – इसे ECMAScript 2015 के अर्रेबफर द्वारा स्थानांतरित कर दिया गया है) और इसलिए वे एक स्ट्रिंग के साथ गारंटी के साथ गए कि कोई भी वर्ण संग्रहीत नहीं है स्ट्रिंग में रेंज 0 से बाहर होनी चाहिए। (वे बजाय नंबरों की एक सरणी के साथ जा सकते थे, लेकिन वे नहीं थे; शायद बड़ी स्ट्रिंग संख्याओं के बड़े सरणियों की तुलना में अधिक मेमोरी-कुशल होती है, क्योंकि संख्याएं चलती हैं।)

यदि आप एक ऐसी फाइल पढ़ रहे हैं जो पश्चिमी लिपि में ज्यादातर टेक्स्ट है (ज्यादातर अंग्रेज़ी, उदाहरण के लिए), तो वह स्ट्रिंग बहुत पाठ की तरह दिखती है यदि आप उसमें यूनिकोड वर्णों के साथ एक फाइल पढ़ते हैं, तो आपको अंतर दिखाई दे, क्योंकि जावास्क्रिप्ट स्ट्रिंग्स यूटीएफ -16 ** (विवरण नीचे) हैं और कुछ अक्षर में 255 से ऊपर का मान होगा, जबकि फ़ाइल के अनुसार एक "बाइनरी स्ट्रिंग" एपीआई स्पेक में 255 से ऊपर कोई मान नहीं होता है (आपके पास यूनिकोड कोड बिंदु के दो बाइट्स के लिए दो व्यक्तिगत "वर्ण" होते हैं)।

यदि आप एक ऐसी फाइल पढ़ रहे हैं जो बिल्कुल पाठ नहीं है (एक छवि, संभवतः), तो आप शायद पढ़ने के पाठ के बीच एक बहुत ही समान परिणाम प्राप्त करेंगे और readAsBinaryString , लेकिन readAsBinaryString साथ आप जानते हैं कि readAsBinaryString करने का कोई प्रयास नहीं किया जाएगा पात्रों के रूप में बाइट अनुक्रम आप नहीं जानते हैं कि यदि आप readAsText उपयोग readAsText , क्योंकि readAsText एन्कोडिंग निर्धारण का उपयोग करने के लिए फाइल एन्कोडिंग क्या है यह जानने की कोशिश करेगी और फिर उसे जावास्क्रिप्ट के यूटीएफ -16 स्ट्रिंग्स पर मैप करें।

यदि आप एक फाइल बनाते हैं और इसे एएससीआईआई या यूटीएफ -8 के अलावा किसी अन्य चीज़ में संग्रहीत करते हैं, तो आप प्रभाव देख सकते हैं। (विंडोज में आप इसे नोटपैड के जरिए कर सकते हैं; "एडिडाइन" के रूप में "एन्कोडिंग" के रूप में "यूनिकोड" के साथ ड्रॉप-डाउन के रूप में, जिसके द्वारा वे यूटीएफ -16 का अर्थ समझते हैं, मुझे यकीन है मैक ओएस और * नििक्स एडिटर्स के पास एक समान सुविधा है।) यहां एक ऐसा पृष्ठ है, जो फ़ाइल को दोनों तरीकों से पढ़ने का नतीजा देता है:

 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-type" content="text/html;charset=UTF-8"> <title>Show File Data</title> <style type='text/css'> body { font-family: sans-serif; } </style> <script type='text/javascript'> function loadFile() { var input, file, fr; if (typeof window.FileReader !== 'function') { bodyAppend("p", "The file API isn't supported on this browser yet."); return; } input = document.getElementById('fileinput'); if (!input) { bodyAppend("p", "Um, couldn't find the fileinput element."); } else if (!input.files) { bodyAppend("p", "This browser doesn't seem to support the `files` property of file inputs."); } else if (!input.files[0]) { bodyAppend("p", "Please select a file before clicking 'Load'"); } else { file = input.files[0]; fr = new FileReader(); fr.onload = receivedText; fr.readAsText(file); } function receivedText() { showResult(fr, "Text"); fr = new FileReader(); fr.onload = receivedBinary; fr.readAsBinaryString(file); } function receivedBinary() { showResult(fr, "Binary"); } } function showResult(fr, label) { var markup, result, n, aByte, byteStr; markup = []; result = fr.result; for (n = 0; n < result.length; ++n) { aByte = result.charCodeAt(n); byteStr = aByte.toString(16); if (byteStr.length < 2) { byteStr = "0" + byteStr; } markup.push(byteStr); } bodyAppend("p", label + " (" + result.length + "):"); bodyAppend("pre", markup.join(" ")); } function bodyAppend(tagName, innerHTML) { var elm; elm = document.createElement(tagName); elm.innerHTML = innerHTML; document.body.appendChild(elm); } </script> </head> <body> <form action='#' onsubmit="return false;"> <input type='file' id='fileinput'> <input type='button' id='btnLoad' value='Load' onclick='loadFile();'> </form> </body> </html> 

अगर मैं इसे "परीक्षण 1 2 3" फाइल के साथ UTF-16 में संग्रहीत करता हूं, तो ये परिणाम मुझे मिलते हैं:

  पाठ (13):

 54 65 73 74 69 6 ई 67 20 31 20 32 20 33

 बाइनरी (28):

 एफएफ फ़े 54 00 65 00 73 00 74 00 69 00 6e 00 67 00 20 00 31 00 20 00 32 00 20 00 33 00 

जैसा कि आप देख सकते हैं, readAsText ने वर्णों की व्याख्या की है और इसलिए मुझे 13 ("1 2 3 का परीक्षण") की लंबाई मिल गई, और readAsBinaryString नहीं था, और इसलिए मुझे 28 (प्रत्येक बाइट के लिए दो-बाइट BOM प्लस दो बाइट मिली) ।


* XMLHttpRequest.response responseType = "arraybuffer" एचटीएमएल 5 में समर्थित है।

** "जावास्क्रिप्ट स्ट्रिंग यूटीएफ -16" एक अजीब बयान की तरह लग सकता है; क्या वे सिर्फ यूनिकोड नहीं हैं? नहीं, एक जावास्क्रिप्ट स्ट्रिंग UTF-16 कोड इकाइयों की एक श्रृंखला है ; आप किराए के जोड़े को दो अलग-अलग जावास्क्रिप्ट "वर्णों" के रूप में देखते हैं, हालांकि, वास्तव में, एक पूरे के रूप में किराए की जोड़ी सिर्फ एक ही चरित्र है विवरण के लिए लिंक देखें

मुझे लगता है कि आप बायनरी डेटा प्राप्त करने के लिए readAsArrayBuffer () का उपयोग कर सकते हैं।