2008-09-29 12 views
8

गैर एएससीआई प्रारूप में हेडर पैरामीटर भेजने का एक स्वीकार्य तरीका प्रतीत नहीं होता है।ब्राउज़र में फ़ाइल डाउनलोड बॉक्स में एक गैर-एएससीआई फ़ाइल नाम कैसे प्रदर्शित करें?

फ़ाइल डाउनलोड के लिए शीर्ष लेख आमतौर पर

तरह

सामग्री-स्वभाव दिखता है: लगाव; filename = "theasciifilename.doc"

अगर आप फ़ाइल नाम पैरामीटर में utf8 एन्कोडेड स्ट्रिंग को तोड़ते हैं, तो फ़ायरफ़ॉक्स इसे ठीक से संभाल लेगा, जबकि आईई फेंक देगा।

एक document on CodeProject that explains a method for encoding the filename.

इस दस्तावेज़ Bản Kiem Kê.doc encodes हेक्स बाइट्स एन्कोडिंग द्वारा% E1% बा% a3n% 20Ki% E1% bb% 83m% 20K% C3% aa.doc बी को भी नहीं है।

समस्या # 1: उस स्ट्रिंग में पहला अक्षर: ả का मान ả है - हेक्स में उस संख्या को एन्कोड करें और आपको% a3% 1e मिलता है। इस आदमी को% e1% ba% a3 कैसे मिला? (मुझे स्पष्ट रूप से कुछ सरल याद आ रहा है)

समस्या # 2: जबकि आईई इस एन्कोडिंग को स्वीकार करता है, फ़ायरफ़ॉक्स नहीं करता है! क्या करें?

उत्तर

3

प्रश्न का उत्तर # 1: आप यूनिकोड और यूटीएफ -8 को भ्रमित कर रहे हैं। 'Ả' का हेक्स मान 0xA31E है हालांकि यह एक यूटीएफ -8 वर्ण नहीं है। यूटीएफ -8 में उस चरित्र को तीन बाइट्स, 0xE1 0xBA 0xA3 पुन: प्राप्त करता है। यूआरएल एन्कोडिंग को गैर-एसिसी एन्कोडिंग के लिए खराब परिभाषित किया गया है लेकिन% e1% ba% a3 उस वर्ण के लिए उपयोग करने के लिए वैध यूटीएफ -8 एन्कोडिंग है।

+0

"यूटीएफ -8 वर्ण" जैसी कोई चीज़ नहीं है। – immibis

1

आपके द्वारा ऊपर दिए गए लिंक में, e1 ba a3 वर्णित चरित्र का यूटीएफ -8 एन्कोडिंग है, चरित्र कोड नहीं।

0

उत्तर (एक तरह से) # 2 समस्या के लिए: प्रत्येक ब्राउज़र के लिए अलग तरह से यह करने के लिए

जब से तुम पता चला है कि एक ही ब्राउज़र में नामकरण योजना अन्य में काम नहीं करता है, अपने ही एकमात्र समाधान है, इसी तरह उदाहरण के लिए here

मामले में लिंक की दूरी पर चला जाता है, समाधान मूल रूप से है:

1. If browser is IE URL encode filename 
2. Generate Content-disposition header 
पाठ्यक्रम का निर्धारण करता है, तो ब्राउज़र उपयोगकर्ता एजेंट (एक ही तरीका है कि आप यह कर सकते हैं के बारे में है) द्वारा आईई है

से भरा है सामान्य खतरे के सभी प्रकार।

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

8

चश्मा मूल रूप से यूएस-एएससीआईआईआई के अलावा कुछ भी अनुमति नहीं देते हैं। HTTP हेडर यूएस-एएससीआईआई हैं। HTTP का पेलोड आईएसओ 885 9 -1 के लिए डिफ़ॉल्ट है लेकिन यह सामग्री निकाय को संदर्भित करता है, हेडर नहीं।

तर्कसंगत रूप से करने के लिए सही चीज है RFC 2047 में वर्णित अनुसार, हेडर में गैर-ASCII डेटा एन्कोडिंग के लिए एमआईएम की तकनीक का उपयोग करना होगा, लेकिन मुझे नहीं पता कि ब्राउज़र वास्तव में इसका समर्थन करते हैं या नहीं।

संपादित करें: ओह, नहीं, RFC 2047 खंड 5 स्पष्ट रूप से कहा गया है कि इनकोडिंग प्रपत्र सामग्री-विन्यास में अनुमति नहीं है। ऐसा लगता है कि आप भाग्य से बाहर हैं - कोई मानक नहीं है।

संपादित 2: एक मानक - RFC 2231 परिभाषित करता है कि अब यह कैसे काम करना है। इसमें कुछ ब्राउज़रों से समर्थन है, लेकिन आईई में समर्थित नहीं है। मुझे some test cases मिला जो दर्शाता है कि यह कैसे काम करता है और ब्राउज़र समर्थन क्या उपलब्ध है।

+0

IE8 (और ऊपर) आरएफसी 2231 का समर्थन करता है, जैसा कि अन्य सभी आधुनिक ब्राउज़र करता है। केवल वे लोग जो इस प्रारूप में निर्दिष्ट फ़ाइल नाम को पहचान नहीं पाएंगे और जो अभी भी कुछ लोकप्रिय हैं आईई 6 और आईई 7 हैं। –

+0

आईई 8 आरएफसी 2231 का समर्थन नहीं करता है, बस परीक्षण किया गया है। यह भी देखें http://greenbytes.de/tech/tc2231/ –

2

समस्या # 2 के लिए आपको इंटरनेट एक्सप्लोरर और फ़ायरफ़ॉक्स दोनों के लिए फ़ाइल नाम एन्कोड करने की आवश्यकता है। केवल अंतर यह है कि आपको फ़ायरफ़ॉक्स में आरएफसी 2231 के प्रारूप का उपयोग करने की आवश्यकता है। यह फ़ायरफ़ॉक्स 3 और इंटरनेट एक्सप्लोरर 7 पर लागू होता है।

0

दुर्भाग्य से, वर्तमान में कोई भी तरीका नहीं है जो सभी उपयोगकर्ता एजेंटों में काम करेगा।

परीक्षण मामलों के लिए http://greenbytes.de/tech/tc2231/ देखें, फिर माइक्रोसॉफ्ट, Google और ऐप्पल से शिकायत करें।

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