2013-08-05 2 views
17

Sto tentando di consentire all'utente di scaricare il file excel con il nome giapponese. Sembra che funzioni solo su IE 8 e altri IE e Firefox, non funziona. Gentilmente suggeriscimi come farlo.Nome di codifica UTF-8 nel file scaricato

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

risposta

9

Uso metodo setCharacterEncoding:

Imposta la codifica dei caratteri (charset MIME) della risposta inviato al client, per esempio, a UTF-8. Se la codifica dei caratteri ha già impostata da setContentType (java.lang.String) o setLocale (java.util.Locale), questo metodo lo sovrascrive. Chiamare setContentType (java.lang.String) con la stringa di testo/html e chiamando questo metodo con la stringa di UTF-8 equivale a chiamando setContentType con la stringa di testo/html; charset = UTF-8.

Questo metodo può essere chiamato più volte per modificare la codifica dei caratteri. Questo metodo non ha effetto se viene chiamato dopo che getWriter è stato chiamato o dopo che la risposta è stata confermata.

modificare il codice con i seguenti:

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

L'ho risolto come segue.

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, quale codice si usa per ottenere il tipo di browser? –

+1

request.getHeader ("User-Agent"); Credo. È passato molto tempo che ho postato questa risposta e ora non riesco a ricordare molto. – zawhtut

+0

Questo post del blog è molto utile durante la risoluzione di questo tipo di problemi http://blogs.msdn.com/b/ieinternals/archive/2010/06/07/content-disposition-attachment-and-international-unicode-characters.aspx e per conoscere i dettagli del browser http://www.fromdev.com/2009/06/dealing-with-different-client-browsers.html – rakeeee

-1

Non c'è bisogno di impostare setCharacterEncoding e tutto ciò che è sufficiente aggiungere sotto la linea suoi lavori bene.

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

il tuo codice non funziona almeno in FF. – nllsdfx