请教一下 Servlet 中如何设定下载文件保存用的字符集

在前面一篇日志: 理解和灵活应用 Struts2 的文件下载功能  还留下一个问题,在 Servlet 中支持文件下载功能时,客户保存下载文件所用的字符集总是 ANSI(ISO8859-1), 如何能设定客户保存文件用的字符集呢?像 BlogJava 的备份数据功能下载后就是用的 UTF-8 字符集的。 自己作了一些尝试,总是无济于事,看如下代码是 Servlet 的 doGet() 方法:

 1public void doGet(HttpServletRequest request, HttpServletResponse response)
 2		throws ServletException, IOException {
 3
 4	// PrintWriter out = response.getWriter();
 5	PrintWriter out = new PrintWriter(new OutputStreamWriter(response
 6			.getOutputStream(), "UTF-8"));
 7
 8	response.setContentType("text/plain;charset=UTF-8");
 9	response.setHeader("Content-Disposition","attachment;filename=down.txt");
10	out.write("Servlet download file test");
11	out.close();
12}

访问这个 Servlet 时会提示下载文件 down.txt,保存之后用记事本打开,另存它时看到的是 ANSI 编码,或用 EditPlus 打开右下角显示的是 ANSI。 然而要是把上面的 "attachment" 改为 "inline",内容为在线打开,同时右键里看到的却是地地道道的 UTF-8,保存文件却不行。 不知道这里各位达人们有无这方面的经验、或是高见,能让下载文件以 UTF-8 编码保存,还望不吝赐教。

永久链接 https://yanbin.blog/servlet-download-encoding/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。