Create UTF-8 file using HttpServletResponse

user411103 picture user411103 · Feb 20, 2012 · Viewed 19.1k times · Source

I am trying to create a UTF-8 file "myFile.aaa" using HttpServletResponse (HttpServlet). The reason why I need this to be UTF-8 is because it might contain special non-printable characters.

However, code below seems to create ANSI-encoded file. At least that is what Notepad++ says, and what I can see reading chars from this file. What am I doing wrong?

Thanks

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

Answer

BalusC picture BalusC · Feb 20, 2012

You need to use the character writer of the response, not the byte output stream.

Replace

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

by

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

Further, I'd recommend setting content type to text/plain, not to an overly generic one which implies binary content, not character content.

I'm not sure about Notepad++, but in Notepad, if the text document does not contain any characters beyond the ANSI range, it will be interpreted as ANSI. Don't mislead you by this behaviour.