2010-12-27 7 views
5

Ho un servlet che invia un file al browser.Come impostare la codifica UTF-8 per un servlet di download di file

Invio queste intestazioni nel servlet.

if (request.isSecure()) { 
      response.addHeader("Pragma", "no-cache"); 
      response.addHeader("Expires", "-1"); 
      response.addHeader("Cache-Control", "no-cache"); 
    } else { 
      response.addHeader("Cache-Control", "private"); 
      response.addHeader("Pragma", "public"); 
    } 

    if (isIE) { 
      response.addHeader("Content-Disposition", "attachment; filename=\"" + encName + "\""); 
      response.addHeader("Connection", "close"); 
      response.setContentType("application/force-download; name=\"" + encName + "\""); 
    } else { 
     response.addHeader("Content-Disposition", "attachment; filename=\"" + encName + "\""); 
     response.setContentType("application/octet-stream; name=\"" + encName + "\""); 
     if (contentLen > 0) { 
      response.setContentLength(contentLen); 
     }       
    } 

Quindi invio il file al browser, ma ho problemi con la codifica del file. Il contenuto del file è UTF-8 ma non so come inviare un'intestazione per questo.

Qualcuno ha idea di come posso fare?

risposta

10

Non è necessario indicare al browser che il file è codificato in UTF-8. Impostando il tipo di contenuto su application/octet-stream, si specifica che il file non deve essere interpretato e potrebbe non essere affatto testo normale.

Se si desidera assolutamente dichiarare una codifica, interrompere la dichiarazione del file come application/octet-stream e dichiararlo come "text/plain; charset = utf-8".

+0

Mi trovavo di fronte a un problema con la codifica errata durante il download di un file html e ho scoperto che l'uso dell'intestazione "Accept: application/octet-stream' ha funzionato. –

3

response.setCharacterEncoding ("utf-8");

Problemi correlati