JSP/SSH实现生成csv文件下载,生成的csv如何转换为ANSI编码?

sugarforever 2011-04-28 11:53:43
环境如下,eclipse,工程的编码设置为utf-8。
现在的实现是先生成utf-8编码的csv文件,然后供下载。
问题是,客户需要这个csv文件是ANSI编码的?我该在服务器端如何改代码?

生成csv文件内容的部分代码如下
try {
byte[] bom = new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF };
FileWriter writer = new FileWriter(csvFile, false);
String str = new String(bom) + buildCsvLines();

writer.write(str);
writer.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

我的用的是struts的DownloadAction做的下载请求处理。核心部分如下:
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub

csvService.exportPurchaseOrders(target);// 这里生成临时csv文件以提供下载

response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename="
+ relative);
File file = new File(target);
StreamInfo si = new FileStreamInfo("application/vnd.ms-excel;", file);

return si;
}

现在的临时办法是下载了csv文件后,用记事本打开,然后点击另存为,会看到编码方式是utf-8,然后选择ANSI,点击保存。就成了ANSI编码的了。用excel打开也能正常显示中文。
请教我如何把通过记事本另存为ANSI的方式在程序里实现?该在哪里改?
我试过new String(str.getBytes("utf-8"), "gb2312")的方式转换utf-8的字符串为gb2312的编码,但生成的文件里全是乱码,无法正常显示中文。

高人指教
...全文
566 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcwtitxu 2011-05-02
  • 打赏
  • 举报
回复
CSV 实际也就是文本文件,

这个在写入文件时可以指定文本编码格式的。

可以参考下面页面中的代码:

http://www.iscripts.org/bbs/viewthread.php?tid=34


BufferedWriter writer = null;
File file = new File("E://wwwroot/download/csv/myCsvFile.csv");
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, false), "GBK"));
writer.write(strCsvContent);
} finally {
if (writer != null) {
writer.close();
}
}
sugarforever 2011-04-30
  • 打赏
  • 举报
回复
顶起来,高手回答下
user_xj 2011-04-29
  • 打赏
  • 举报
回复

String name="Visual C%2B%2B";
name=java.net.URLDecoder.decode(name, "UTF-8");//转换成UTF-8的格式
System.out.println(name);
newoneheb123 2011-04-29
  • 打赏
  • 举报
回复
response.setHeader("content-Disposition",
"attachment;filename="+new String(filename.getBytes(),"iso-8859-1"));
amos1989 2011-04-29
  • 打赏
  • 举报
回复
直接就用UTF-8 不行吗?

为什么非要转成ansi
sugarforever 2011-04-29
  • 打赏
  • 举报
回复
顶起来,没有人吗?
sugarforever 2011-04-29
  • 打赏
  • 举报
回复
是内容要编码成Ansi,不是文件名

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧