2012-02-19 11 views
7

Estoy intentando crear un archivo UTF-8 "myFile.aaa" usando HttpServletResponse (HttpServlet). La razón por la que necesito que esto sea UTF-8 es porque podría contener caracteres especiales no imprimibles.Crear archivo UTF-8 usando HttpServletResponse

Sin embargo, el siguiente código parece crear un archivo con codificación ANSI. Al menos eso es lo que dice Notepad ++, y lo que puedo ver leyendo caracteres de este archivo. ¿Qué estoy haciendo mal?

Gracias

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

¿Por qué quiere especificar '' charset' en un octeto-stream'? –

Respuesta

11

Es necesario utilizar el escritor carácter de la respuesta, no el flujo de salida de bytes.

Reemplazar

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

por

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

Además, me gustaría recomendar el establecimiento de tipo de contenido a text/plain, no a uno excesivamente genérico que implica el contenido binario, no en contenido de caracteres.

No estoy seguro sobre Notepad ++, pero en el Bloc de notas, si el documento de texto no contiene ningún carácter más allá del rango ANSI, se interpretará como ANSI. No te engañes por este comportamiento.

+0

gracias ... funciona ... –

3

Aquí es mi muestra:

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(); 
} 
Cuestiones relacionadas