请教一下 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) 进行许可。