2012-02-19 9 views
6

का उपयोग कर readAsBinaryString और readAsText के बीच अंतर, उदाहरण के तौर पर, जब मैं FileReader API का उपयोग कर फ़ाइल से π वर्ण (\u03C0) पढ़ता हूं, तो मुझे FileReader.readAsText(blob) का उपयोग करके इसे पढ़ने पर मुझे पीआई कैरेक्टर वापस मिल जाता है। लेकिन जब मैं FileReader.readAsBinaryString(blob) उपयोग करते हैं, मैं परिणाम \xcf\x80 बजाय मिलता है, जो अनुकरणीय चरित्र के साथ किसी भी दिखाई संबंध हो प्रतीत नहीं होता है। क्या चल रहा है? अच्छी तरह से (यह शायद रास्ता UTF-8/16 एन्कोड किया गया है के साथ क्या करना कुछ है ...)FileReader

+2

'CF80' π के लिए UTF-8 एन्कोडिंग है। – deceze

+0

... ओह, तुम सही हो ... धन्यवाद! – gengkev

+0

... जो शायद बहुत स्पष्ट था, लेकिन यदि आप चाहें तो इसे उत्तर के रूप में पोस्ट कर सकते हैं। – gengkev

उत्तर

2

ओह, अगर है कि तुम सब की जरूरत है ... :)

CF80 है के लिए UTF-8 एन्कोडिंग है π।

12

FileReader.readAsText खाते में फ़ाइल की एन्कोडिंग लेता है। विशेष रूप से, चूंकि आपके पास यूटीएफ -8 में एन्कोड की गई फ़ाइल है, इसलिए प्रति चरित्र एकाधिक बाइट्स हो सकते हैं। इसे पाठ के रूप में पढ़ना, यूटीएफ -8 को पढ़ा जाता है, और आपको अपनी स्ट्रिंग मिलती है।

FileReader.readAsBinaryString, दूसरे हाथ पर, करता है यह वास्तव में क्या कहते हैं। यह बाइट द्वारा फ़ाइल बाइट पढ़ता है। यह बहु-बाइट वर्णों को नहीं पहचानता है, जो विशेष रूप से बाइनरी फ़ाइलों के लिए अच्छी खबर है (मूल रूप से टेक्स्ट फ़ाइल को छोड़कर कुछ भी)। चूंकि π दो-बाइट वर्ण है, इसलिए आपको दो अलग-अलग बाइट मिलते हैं जो इसे आपकी स्ट्रिंग में बनाते हैं।

यह अंतर कई स्थानों पर देखा जा सकता है। विशेष रूप से जब एन्कोडिंग खो दिया है और आप Ã © के रूप में प्रदर्शित é जैसे पात्रों को देखते हैं।

+0

धन्यवाद ... इसलिए जब मैं एक ब्लॉबबिल्डर को \ xA2 जोड़ने की कोशिश करता हूं तो यह \ xC2 \ xA2 के रूप में निकलता है क्योंकि यह यूटीएफ -8 एन्कोडेड है, लेकिन मैं वापस \ xA2 कैसे प्राप्त कर सकता हूं? (यह एक सिंगल बाइट वर्ण है) – gengkev

+0

ओह, मुझे लगता है कि मुझे एक ऐरेबफर का उपयोग करना होगा – gengkev

संबंधित मुद्दे