2013-08-05 11 views
17

मैं उपयोगकर्ता को जापानी नाम के साथ एक्सेल फ़ाइल डाउनलोड करने की कोशिश कर रहा हूं। ऐसा लगता है कि यह केवल आईई 8 और अन्य आईई और फ़ायरफ़ॉक्स काम करता है, यह काम नहीं कर रहा है। कृपया मुझे सुझाव दें कि इसे कैसे रोकें।डाउनलोड फ़ाइल में यूटीएफ -8 एन्कोडिंग नाम

String fileName = dateString+"_マイページ情報.xls"; 
byte[] data = writer.getData(); 
response.setContentType("application/ms-excel"); 
response.setContentLength(data.length); 
response.setHeader("Expires:", "0"); // eliminates browser caching 
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode(fileName)); 

उत्तर

9

उपयोग विधि setCharacterEncoding:

सेट वर्ण एन्कोडिंग (MIME चारसेट) प्रतिक्रिया के ग्राहक के लिए भेजा जा रहा है, उदाहरण के लिए, UTF-8 में। यदि वर्ण एन्कोडिंग में पहले से सेटकंटेंट टाइप (java.lang.String) या setLocale (java.util.Locale) द्वारा सेट किया गया है, तो यह विधि इसे ओवरराइड करती है। कॉल कंटेंट टाइप (java.lang.String) टेक्स्ट/एचटीएमएल के स्ट्रिंग के साथ और इस विधि को यूटीएफ -8 के स्ट्रिंग के साथ कॉल करने के साथ कॉलिंग सेट टेक्स्ट/एचटीएमएल के स्ट्रिंग के साथ कॉन्टेन्ट टाइप टाइप करें; charset = UTF-8।

इस विधि को चरित्र एन्कोडिंग को बदलने के लिए बार-बार कहा जा सकता है। इस विधि का कोई प्रभाव नहीं पड़ता है जब getWriter प्रतिक्रिया के बाद या उसके बाद किया गया है।

निम्नलिखित के साथ अपने कोड को संशोधित करें:

response.setContentType("application/ms-excel; charset=UTF-8"); 
response.setCharacterEncoding("UTF-8"); 
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode(fileName, "UTF-8")); 
29

मुझे इसे निम्न के रूप में हल किया गया है।

fileName = dateString+"_マイページ情報.xls"; 
fileName = URLEncoder.encode(fileName,"UTF-8"); 
try { 
     response.setContentType("application/ms-excel; charset=UTF-8"); 
     response.setCharacterEncoding("UTF-8"); 
     if(browserType.equals("IE")||browserType.equals("Chrome")) 
      response.setHeader("Content-Disposition","attachment; filename="+fileName); 
     if(browserType.endsWith("Firefox")) 
      response.setHeader("Content-Disposition","attachment; filename*=UTF-8''"+fileName); 
    } catch (Exception e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
+1

@zawhtut के लिए काम किया, कौन-सा कोड ब्राउज़र प्रकार प्राप्त करने के लिए प्रयोग करते हैं? –

+1

request.getHeader ("उपयोगकर्ता-एजेंट"); मुझे लगता है। यह लंबे समय से मैंने यह जवाब पोस्ट किया है और अब बहुत कुछ याद नहीं कर सकता है। – zawhtut

+0

इस ब्लॉग पोस्ट को इस तरह के मुद्दों को हल करते समय बहुत उपयोगी है http://blogs.msdn.com/b/ieinternals/archive/2010/06/07/content-disposition-attachment-and-international-unicode-characters.aspx और ब्राउज़र विवरण जानने के लिए http://www.fromdev.com/2009/06/dealing-with- अलग-client-browsers.html – rakeeee

-1

setCharacterEncoding और सभी कि बस लाइन अपने काम करता है ठीक नीचे जोड़ने के सेट करने के लिए कोई ज़रूरत नहीं।

String fileName = URLEncoder.encode(fileName, "UTF-8"); 
response.setHeader("Content-Disposition","attachment; filename="+fileName); 
+1

आपका कोड कम से कम एफएफ में काम नहीं करता है। – nllsdfx

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