2012-03-05 4 views
5

मैं फ़ाइलों के माध्यम से डेटा निर्यात कर रहा हूं। आउटपुट बेस 64 एन्कोडेड डेटा है।क्या यह utf-8 टेक्स्ट/सादा माइम प्रकार के लिए उपयुक्त है?

$data = base64_encode(serialize($data)); 

कौन सा की तरह कुछ में परिणाम:

bGFzcyI6MTp7czo1OiJzZXR1cCI7YTo3Mzp7czoyNToicGFnZXNfY29udGFjdF91c19oZWFkbGlu 

तो मैं सोच रहा हूँ क्या चारसेट इस डेटा (सादा पाठ) के लिए अधिक उपयुक्त है। us-ascii पर्याप्त लगता है लेकिन utf-8 हमेशा एक त्रुटि-सबूत डिफ़ॉल्ट लगता है।

header('content-type: text/plain; charset=utf-8'); 
+3

आपके पास टेक्स्ट/सादे या utf8 भागों के आसपास उद्धरण नहीं होना चाहिए। – Quentin

+0

@quentin धन्यवाद। मुझे वास्तव में यह नहीं पता था ... –

+0

मुझे अभी भी लगता है कि स्वीकृत उत्तर गलत है (भले ही मेरा डाउनवॉटेड हो)। मैंने अपने जवाब को थोड़ा सा स्पष्ट किया, पुनर्विचार की परवाह की? – Evert

उत्तर

7

यह वास्तव में कोई फर्क नहीं पड़ता; आपकी सामग्री मान्य है US-ASCII, मान्य UTF-8, मान्य ISO-8859-1 (या, मुझे विश्वास है, कोईISO-8859-x), मान्य Windows-1252, और इसी तरह। बस UTF-16 या EBCDIC या कुछ न डालें।

(के लिए क्या इसके लायक है, मैं US-ASCII साथ है, क्योंकि यह पूरी तरह से इतना स्पष्ट रूप से किया जा रहा बिना भी पूर्व यूनिकोड कंप्यूटर द्वारा समर्थित है जाना चाहते हैं एक पूर्व यूनिकोड वर्ण सेट ISO-8859-1 या whatnot के रूप में, लेकिन वह वास्तव में एक व्यक्तिपरक वरीयता है।)

+0

कहीं एक ऐसा नमूना है जो कहता है कि आपको वर्णमाला को सबसे छोटा बताया गया है जो सही तरीके से इसका वर्णन करता है। इस प्रकार यदि यह सख्ती से ASCII है, तो इसे आईएसओ -885 9 -1 या यूटीएफ -8 के बजाय कहा जाना चाहिए, या यदि यह विंडोज -1252 का आईएसओ -885 9 -1 सबसेट है, तो आपको भी यह कहना होगा। मुझे लगता है कि यह ईमेल के लिए है, इसलिए इस मामले में लागू नहीं हो सकता है। – tchrist

+1

@ क्रिसमस: आप 90% सही हैं। वर्तमान में प्रासंगिक आरएफसी (2046 और 2616) उस सिफारिश को करते हैं, लेकिन वे "जरूरी" के बजाय "चाहिए" का उपयोग करते हैं, जो आरएफसी में एक सार्थक भेद है। इसके अलावा, दिलचस्प बात यह है कि आरएफसी 2616 का कहना है कि "इकाई को लेबल करने से इकाई को लेबलिंग यूएस-एएससीआईआई या आईएसओ -885 9 -1" के साथ इकाई को लेबल करने पर प्राथमिकता नहीं दी जाती है, लेकिन आईएमएचओ आईएसओ -885 9 -1 की बात करते समय अप्रचलित है, क्योंकि कई उपयोगकर्ता एजेंट अब मानक मानते हैं, यूटीएफ -8 का एक डिफ़ॉल्ट वर्णमाला मानते हैं। (और मैंने देखा है कि आईईटीएफ स्वयं 'charset = ISO-8859-1'' के साथ कुछ पेजों परोसता है।) लेकिन यह अभी भी यूएस-एएससीआईआई पर लागू हो सकता है। – ruakh

+0

लेकिन भले ही यह यूएस-एएससीआईआईआई के साथ संगत है, जो इसे यूएस-एएससीआईआईआई नहीं बनाता है :) मैंने अपना जवाब स्पष्ट किया, क्या आप अभी भी असहमत हैं? – Evert

19

आपको वास्तव में एक वर्णमाला की भी आवश्यकता नहीं होगी। हालांकि 'टेक्स्ट/सादा' गलत हो सकता है, क्योंकि यह वास्तव में भी पाठ नहीं है।

भले ही यह एएससीआई, यूटीएफ -8, लैटिन 1 (जैसा कि खंड का उल्लेख किया गया है) के साथ संगत है, आपको बस इसे बाइनरी फ़ाइल के रूप में देखना चाहिए।

अद्यतन

मैं इस एक सा स्पष्ट करना चाहता था (सभी downvotes के बाद, आम लोग मुझे एक मौका दे!)

@ dan04: UTF-8 पाठ है, मैंने ऐसा नहीं कहा यह नहीं था बेस 64 नहीं है, बेस 64 एक एन्कोडिंग भी है, लेकिन यह किसी बाइनरी अनुक्रम को एन्कोड कर सकता है। बेस 64 को इस तरह से एन्कोड किया गया है कि इसे यूएस-एएससीआईआईआई (और इसलिए यूटीएफ -8 और लैटिन 1/आईएसओ -885 9) में लपेटना संभव है।

बेस 64 अभी भी एक बाइनरी अनुक्रम है, और प्रति परिभाषा पाठ नहीं है। तथ्य यह है कि ऑक्टेट-वैल्यू की एक ही श्रृंखला यूएस-एएससीआईआई (और यूएस-एएससीआईआई को पढ़ने वाली किसी भी चीज द्वारा 'प्रिंट करने योग्य' के रूप में उपयोग की जाती है) यह टेक्स्ट नहीं बनाती है।

यही कारण है कि बेस 64 में इसका अपना माइमटाइप नहीं है। इसे एक सामग्री हस्तांतरण एन्कोडिंग माना जाता है। (इसे देखो!)

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

Content-Type: image/jpeg 
Content-Transfer-Encoding: base64 

और इसी कारण मुझे लगता है कि अगर आप स्ट्रिंग की सामग्री के बारे में कुछ भी कहने के लिए नहीं करना चाहते हैं (या इस जानकारी नहीं है), यह 'सामान्य बाइनरी' के रूप में यह इलाज के लिए सबसे अच्छा है है, उदाहरण:

Content-Type: application/octet-stream 
Content-Transfer-Encoding: base64 
+0

यूटीएफ -8 पाठ कैसे टेक्स्ट नहीं है? – dan04

+1

@ dan04: मैंने अपना जवाब अपडेट किया। उम्मीद है कि यह अधिक समझ में आता है – Evert

+2

+1 जो आप उल्लेख करते हैं वह वास्तव में दिलचस्प है। मैं इसे भविष्य में ध्यान में रखूंगा। मेरे मामले में मैंने 'यूएस-एएससीआईआईआई' का इस्तेमाल किया क्योंकि वास्तव में एक धारावाहिक वस्तु var है। आपके योगदान के लिए धन्यवाद। –

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