2013-08-05 3 views
17

Ich versuche, den Benutzer die Excel-Datei mit japanischem Namen herunterladen zu lassen. Es scheint, dass es IE 8 nur funktioniert und andere IE und Firefox, es funktioniert nicht. Bitte schlage mir vor, wie ich das machen kann.UTF-8 Kodierungsname in heruntergeladene Datei

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)); 

Antwort

9

Verwenden Methode setCharacterEncoding:

Stellt den Zeichencodierung (MIME charset) des Antwort an den Client gesendet wird, beispielsweise auf UTF-8. Wenn die Zeichencodierung bereits von setContentType (java.lang.String) oder setLocale (java.util.Locale) festgelegt wurde, überschreibt diese Methode sie. Aufruf von setContentType (java.lang.String) mit der Zeichenfolge von text/html und Aufruf dieser Methode mit der Zeichenfolge von UTF-8 entspricht Aufruf von setContentType mit der Zeichenfolge von text/html; Zeichensatz = UTF-8.

Diese Methode kann wiederholt aufgerufen werden, um die Zeichencodierung zu ändern. Diese Methode hat keine Wirkung, wenn sie aufgerufen wird, nachdem getWriter aufgerufen wurde oder nachdem die Antwort festgeschrieben wurde.

Code ändern mit folgenden:

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

Ich habe es wie folgt gelöst.

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 für mich gearbeitet, welcher Code verwenden Sie den Browser-Typ zu bekommen? –

+1

request.getHeader ("Benutzeragent"); Ich denke. Es ist lange her, dass ich diese Antwort gepostet habe und jetzt kann ich mich nicht mehr viel erinnern. – zawhtut

+0

Dieser Blog-Beitrag ist sehr hilfreich beim Lösen dieser Art von Problemen http://blogs.msdn.com/b/ieinternals/archive/2010/06/07/content-disposition-attachment-and-international-unicode-characters.aspx und die Browserdetails http://www.fromdev.com/2009/06/dealing-with-different-client-browsers.html – rakeeee

-1

Keine Notwendigkeit setCharacterEncoding und alle zu setzen, die nur unter der Linie seine Werke fein hinzuzufügen.

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

Ihr Code funktioniert zumindest nicht in FF. – nllsdfx

Verwandte Themen