2012-02-19 14 views
7

Sto cercando di creare un file UTF-8 "myFile.aaa" utilizzando HttpServletResponse (HttpServlet). Il motivo per cui ho bisogno che questo sia UTF-8 è perché potrebbe contenere caratteri speciali non stampabili.Creare file UTF-8 utilizzando HttpServletResponse

Tuttavia, il codice seguente sembra creare un file con codifica ANSI. Almeno questo è ciò che dice Notepad ++ e cosa posso vedere leggendo i caratteri da questo file. Che cosa sto facendo di sbagliato?

Grazie

public void doPost(HttpServletRequest req, HttpServletResponse res) 
    throws ServletException, IOException 
    { 
     res.setHeader("Content-Type", "application/octet-stream; charset=UTF-8"); 
     res.setHeader("Content-Disposition","attachment;filename=myFile.aaa"); 
     res.setCharacterEncoding("UTF-8"); 
     ServletOutputStream os = res.getOutputStream(); 
     os.print("Hello World"); 
     os.flush(); 
     os.close(); 
    } 
+0

Perché si vuole specificare 'charset' su un' ottetto-stream'? –

risposta

11

È necessario utilizzare lo scrittore carattere della risposta, non il flusso di output di byte.

Sostituire

ServletOutputStream os = res.getOutputStream(); 
os.print("Hello World"); 
os.flush(); 
os.close(); 

da

res.getWriter().write("Some UTF-8"); 

Inoltre, vi consiglio di impostare il tipo di contenuto per text/plain, non ad uno eccessivamente generica che implica contenuto binario, non contento carattere.

Non sono sicuro di Notepad ++, ma nel Blocco note, se il documento di testo non contiene caratteri oltre all'intervallo ANSI, verrà interpretato come ANSI. Non lasciarti fuorviare da questo comportamento.

+0

grazie..it funziona .. –

3

Ecco il mio esempio:

private static final String KALIMAH = "\u0644\u064e\u0622 \u0625\u0650\u0644\u0670\u0647\u064e \u0625\u0650\u0644\u0651\u064e\u0627 \u0627\u0644\u0644\u0647\u064f \u0645\u064f\u062d\u064e\u0645\u0651\u064e\u062f\u064c \u0631\u0651\u064e\u0633\u064f\u0648\u0652\u0644\u064f \u0627\u0644\u0644\u0647\u0650"; 

protected void printGreeting (HttpServletResponse res) throws IOException { 
    res.setContentType("text/html"); 
    res.setCharacterEncoding("UTF-8"); 
    PrintWriter out = res.getWriter(); 
    out.write(KALIMAH); 
    out.close(); 
} 
Problemi correlati