2012-02-19 14 views
7

Próbuję utworzyć plik "myFile.aaa" w formacie UTF-8 za pomocą HttpServletResponse (HttpServlet). Powodem, dla którego potrzebuję tego, aby był UTF-8, jest to, że może zawierać specjalne niedrukowalne znaki.Utwórz plik UTF-8 za pomocą HttpServletResponse

Jednak poniższy kod wydaje się tworzyć plik zakodowany w ANSI. Tak przynajmniej mówi Notepad ++ i co mogę zobaczyć czytając znaki z tego pliku. Co ja robię źle?

Dzięki

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

Dlaczego chcesz określić '' charset' na oktetu-stream'? –

Odpowiedz

11

Trzeba użyć pisarza znaków w odpowiedzi, a nie strumienia wyjściowego bajt.

Wymień

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

przez

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

Ponadto, polecam ustawienie typu zawartości do text/plain, nie nadmiernie generycznego jednego co oznacza zawartość binarną, nie zadowalając charakter.

Nie mam pewności co do Notepad ++, ale w Notatniku, jeśli dokument tekstowy nie zawiera żadnych znaków spoza zakresu ANSI, będzie interpretowany jako ANSI. Nie wprowadzaj w błąd przez takie zachowanie.

+0

dzięki ... to działa .. –

3

Oto moja próba:

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