सामग्री स्थानांतरण एन्कोडिंग 7 बिट या 8 बिट


88

ईमेल सामग्री भेजते समय, "सामग्री अंतरण एन्कोडिंग" शीर्षक सेट करना आवश्यक है। मुझे मिले ईमेल के कई हेडर का अवलोकन किया। कुछ ईमेल "7 बिट" का उपयोग कर रहे हैं और कुछ "8 बिट" का उपयोग कर रहे हैं।

इन दोनों के बीच क्या अंतर है? कौन सा अनुशंसित है? क्या इन शीर्षलेखों को सेट करने के लिए ईमेल बॉडी के लिए कोई विशेष एन्कोडिंग आवश्यक है?


मुझे नहीं लगता कि इस हेडर को सेट करना आवश्यक है, क्या यह है? मैं ईमेल के साथ काम करना शुरू कर रहा हूं और मैंने इसके बिना ईमेल देखा है - बहुत सरल, गैर-मल्टीपार्ट, एएससीआईआई-पाठ-केवल संदेश।
ओसुलिक

जवाबों:


281

यह पढ़ने में थोड़ा घना हो सकता है, लेकिन RFC 1341 के "कंटेंट-ट्रांसफर-एन्कोडिंग" खंड में सभी विवरण हैं:

http://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html

स्थिति थोड़े बुरे से बदतर होती चली जाती है। यहाँ मेरा सारांश है:

पृष्ठभूमि

SMTP, परिभाषा (RFC 821) द्वारा, 7 बिट्स के 1000 वर्णों की मेल को सीमित करता है। इसका मतलब है कि पाइप को नीचे भेजने वाले किसी भी बाइट में "1" के लिए सबसे महत्वपूर्ण ("उच्चतम-क्रम") बिट सेट नहीं हो सकता है।

जो सामग्री हम भेजना चाहते हैं, वह अक्सर इस प्रतिबंध का पालन नहीं करती है। एक छवि फ़ाइल के बारे में सोचें, या एक पाठ फ़ाइल जिसमें यूनिकोड वर्ण हैं: इन फ़ाइलों के बाइट में अक्सर "8" पर उनका 8 वाँ बिट सेट होगा। SMTP इसे अनुमति नहीं देता है, इसलिए आपको बेमेल के आसपास काम करने के तरीके का वर्णन करने के लिए "ट्रांसफ़र एन्कोडिंग" का उपयोग करने की आवश्यकता है।

Content-Transfer-Encodingशीर्षलेख के मान उस नियम का वर्णन करते हैं, जिसे आपने इस समस्या को हल करने के लिए चुना है।

7 बिट एनकोडिंग

7bitबस का अर्थ है "मेरे डेटा में केवल US-ASCII वर्ण हैं, जो केवल प्रत्येक वर्ण के लिए निचले 7 बिट्स का उपयोग करते हैं।" आप मूल रूप से गारंटी दे रहे हैं कि आपकी सामग्री के सभी बाइट पहले से ही एसएमटीपी के प्रतिबंधों का पालन करते हैं, और इसलिए इसे किसी विशेष उपचार की आवश्यकता नहीं है। आप इसे बस के रूप में पढ़ सकते हैं।

ध्यान दें कि जब आप चुनते हैं 7bit, तो आप इस बात से सहमत होते हैं कि आपकी सामग्री की सभी लाइनें लंबाई में 1000 वर्णों से कम हैं।

जब तक आपकी सामग्री इन नियमों का पालन करती है, 7bitतब तक सर्वोत्तम स्थानांतरण एन्कोडिंग है, क्योंकि कोई अतिरिक्त कार्य आवश्यक नहीं है; जैसे ही वे पाइप से उतरते हैं आप बाइट्स को पढ़ / लिख लेते हैं। 7bitसामग्री को नेत्रगोलक करना और उसकी समझ बनाना भी आसान है। यहाँ विचार यह है कि यदि आप "सादे अंग्रेजी पाठ" में लिख रहे हैं तो आप ठीक हो जाएंगे। लेकिन 2005 में यह सच नहीं था और यह आज भी सच नहीं है।

8 बिट एनकोडिंग

8bit"मेरे डेटा में विस्तारित ASCII वर्ण शामिल हो सकते हैं; वे मानक US-ASCII 7-बिट वर्णों के बाहर विशेष वर्णों को इंगित करने के लिए 8 वें (उच्चतम) बिट का उपयोग कर सकते हैं।" जैसा कि 7bit, अभी भी 1000-वर्ण रेखा की सीमा है।

8bit, जैसे 7bit, वे वास्तव में बाइट्स का कोई भी परिवर्तन नहीं करते हैं क्योंकि वे तार से लिखे या पढ़े जाते हैं। इसका मतलब सिर्फ इतना है कि आप इस बात की गारंटी नहीं दे रहे हैं कि किसी भी बाइट में सबसे ज्यादा "1" का सेट नहीं होगा।

यह एक कदम से ऊपर की तरह लगता है 7bit, क्योंकि यह आपको अपनी सामग्री में अधिक स्वतंत्रता देता है। हालाँकि, RFC 1341 में यह tidbit समाहित है:

इस दस्तावेज़ के प्रकाशन के रूप में, कोई मानकीकृत इंटरनेट परिवहन नहीं है, जिसके लिए मेल बॉडी में अनएन्कोडेड 8-बिट या बाइनरी डेटा शामिल करना वैध है। इस प्रकार ऐसी कोई परिस्थिति नहीं है जिसमें "8 बिट" या "बाइनरी" सामग्री-स्थानांतरण-एन्कोडिंग वास्तव में इंटरनेट पर कानूनी है।

RFC 1341 20 साल पहले आया था। तब से हम RFC 6152 में 8bit MIME एक्सटेंशन प्राप्त कर चुके हैं । लेकिन फिर भी, लाइन सीमाएं अभी भी लागू हो सकती हैं:

ध्यान दें कि यह एक्सटेंशन एक SMTP सर्वर को सीमित करने की संभावना को समाप्त नहीं करता है; सर्वर इस एक्सटेंशन को लागू करने के लिए स्वतंत्र हैं, लेकिन फिर भी एक लाइन की लंबाई 1000 ऑक्टेट से कम नहीं है।

बाइनरी एनकोडिंग

binaryके रूप में ही है 8bit, सिवाय इसके कि कोई लाइन लंबाई प्रतिबंध नहीं है। आप अभी भी अपने इच्छित किसी भी वर्ण को शामिल कर सकते हैं, और कोई अतिरिक्त एन्कोडिंग नहीं है। 8bitRFC 1341 के समान , यह बताता है कि यह वास्तव में एक वैध एन्कोडिंग ट्रांसफर एन्कोडिंग नहीं है। RFC 3030 ने इसे बढ़ाया BINARYMIME

मुद्रित करने योग्य

8BITMIMEएक्सटेंशन से पहले , 7bitSMTP पर नहीं जा सकने वाली सामग्री भेजने का एक तरीका होना चाहिए । HTML फ़ाइलें (जिनमें 1000 से अधिक वर्ण रेखाएँ हो सकती हैं) और अंतर्राष्ट्रीय वर्णों वाली फ़ाइलें इसके अच्छे उदाहरण हैं। quoted-printableएन्कोडिंग (RFC 1341 की धारा 5.1 में परिभाषित किया जाता है) इस संभाल करने के लिए बनाया गया है। यह दो काम करता है:

  • परिभाषित करता है कि गैर-यूएस-एएससीआईआई पात्रों से कैसे बचा जाए ताकि उन्हें केवल 7-बिट पात्रों में दर्शाया जा सके। (लघु संस्करण: वे समान चिह्न के साथ प्लस दो 7-बिट वर्णों के रूप में प्रदर्शित होते हैं।)
  • परिभाषित करता है कि लाइनें 76 वर्णों से अधिक नहीं होंगी, और उस रेखा को विशेष वर्णों (जो तब बच गए) का उपयोग करके दर्शाया जाएगा।

बचने और छोटी लाइनों की वजह से, उद्धरित मुद्रण योग्य, बहुत कठिन की तुलना में एक मानव द्वारा पढ़ने के लिए है 7bitया 8bit, लेकिन यह संभव सामग्री की एक अधिक व्यापक रेंज का समर्थन करता है।

बेस 64 एनकोडिंग

यदि आपका डेटा काफी हद तक गैर-पाठ (उदा: एक छवि फ़ाइल) है, तो आपके पास कई विकल्प नहीं हैं। 7bitतालिका से बाहर है। 8bitऔर binaryMIME एक्सटेंशन RFC से पहले असमर्थित थे। quoted-printableकाम करेगा, लेकिन वास्तव में अक्षम है (प्रत्येक बाइट का प्रतिनिधित्व 3 वर्णों द्वारा किया जाएगा)।

base64इस प्रकार के डेटा के लिए एक अच्छा समाधान है। यह 4 यूएस-एएससीआईआई पात्रों के रूप में 3 कच्चे बाइट्स को एनकोड करता है, जो अपेक्षाकृत कुशल है। RFC 1341 base64एक SMTP संदेश के भीतर फिट होने के लिए 76 अक्षरों की डेटा लाइन की लंबाई को और सीमित कर देता है , लेकिन यह तय करना अपेक्षाकृत आसान है कि आप तय लंबाई में मनमाने अक्षरों को विभाजित या समेट रहे हैं।

बड़ी नकारात्मक बात यह है कि base64-encoded डेटा मनुष्यों द्वारा बहुत अधिक पूरी तरह से अपठनीय है, भले ही यह "सादे" पाठ के नीचे हो।


10
यह एक अद्भुत उत्तर है, काश मैं 100 बार उत्थान कर पाता! हालांकि एक सवाल: क्या ये नियम अटैचमेंट के लिए लागू होते हैं? परीक्षा में मेरे पास एक ईमेल से जुड़ी एक XML फ़ाइल है, जहाँ XML फ़ाइल की सामग्री में UTF-8 डेटा होता है। यहाँ सही दृष्टिकोण क्या है?
14

1
@ ट्रोजननाम: हां, ये सभी ईमेल सामग्री पर लागू होते हैं, जिसमें संलग्नक भी शामिल हैं। (कवर के नीचे सब कुछ अन्यायपूर्ण MIME "भागों" है, लेकिन यह एक और कहानी है।) आप अभी भी किसी ईमेल में इसे प्राप्त करने के लिए अपनी सामग्री को किसी भी तरह से एन्कोड करने जा रहे हैं।
क्रेग वॉकर

1
@ ट्रोजननाम: कोई भी फाइल एक "बाइनरी" फाइल होती है, भले ही इसे टेक्स्ट भी माना जा सकता है, इसलिए BINARYMIME और BINARY उपलब्ध हैं (जितना वे किसी भी चीज के लिए उपलब्ध हैं)। 7Bit अच्छा नहीं है क्योंकि सामग्री का प्रतिनिधित्व करने के लिए आपकी UTF-8 सामग्री को 8 बिट की आवश्यकता है। 8 बिट अच्छा नहीं है क्योंकि इसके लिए लाइन की लंबाई सीमाएँ आवश्यक हैं जो आपकी सामग्री का हिस्सा नहीं हैं।
क्रेग वॉकर

2
वह उद्धरण योग्य मुद्रण योग्य या Base64 छोड़ देता है, जो दोनों आपके XML दस्तावेज़ को सफलतापूर्वक आपके ईमेल में एन्कोड कर सकते हैं। ध्यान दें कि ये दोनों मानव के लिए कच्चे प्रारूप में पढ़ना मुश्किल कर रहे हैं (बेस 64 अपठनीय है, क्यूपी मुश्किल है)। लेकिन मानवीय पठनीयता एक माध्यमिक चिंता है; जब तक आप हमेशा मान लेते हैं कि आपको इसे डिकोड करना है और साथ ही इसे एनकोड करना है, तो आप ठीक हैं।
क्रेग वॉकर

2
अतिरिक्त प्रतिबंध: 8-बिट में nulls या नॉन-एंड-ऑफ-लाइन CRs या LF शामिल नहीं है।
मैक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.