环境如下,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的编码,但生成的文件里全是乱码,无法正常显示中文。高人指教

解决方案 »

  1.   


            String name="Visual C%2B%2B"; 
    name=java.net.URLDecoder.decode(name, "UTF-8");//转换成UTF-8的格式
             System.out.println(name);
      

  2.   

    直接就用UTF-8 不行吗?为什么非要转成ansi
      

  3.   

    response.setHeader("content-Disposition",
    "attachment;filename="+new String(filename.getBytes(),"iso-8859-1"));
      

  4.   

    是内容要编码成Ansi,不是文件名
      

  5.   

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