问题描述
环境如下,eclipse,工程的编码设置为utf-8。现在的实现是先生成utf-8编码的csv文件,然后供下载。问题是,客户需要这个csv文件是ANSI编码的?我该在服务器端如何改代码?生成csv文件内容的部分代码如下try{byte[]bom=newbyte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF};FileWriterwriter=newFileWriter(csvFile,false);Stringstr=newString(bom)+buildCsvLines();writer.write(str);writer.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}我的用的是struts的DownloadAction做的下载请求处理。核心部分如下:protectedStreamInfogetStreamInfo(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{//TODOAuto-generatedmethodstubcsvService.exportPurchaseOrders(target);//这里生成临时csv文件以提供下载response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition","attachment;filename="+relative);Filefile=newFile(target);StreamInfosi=newFileStreamInfo("application/vnd.ms-excel;",file);returnsi;}现在的临时办法是下载了csv文件后,用记事本打开,然后点击另存为,会看到编码方式是utf-8,然后选择ANSI,点击保存。就成了ANSI编码的了。用excel打开也能正常显示中文。请教我如何把通过记事本另存为ANSI的方式在程序里实现?该在哪里改?我试过newString(str.getBytes("utf-8"),"gb2312")的方式转换utf-8的字符串为gb2312的编码,但生成的文件里全是乱码,无法正常显示中文。高人指教
解决方案
解决方案二:
Stringname="VisualC%2B%2B";name=java.net.URLDecoder.decode(name,"UTF-8");//转换成UTF-8的格式System.out.println(name);
解决方案三:
顶起来,没有人吗?
解决方案四:
该回复于2011-04-29 09:41:16被版主删除
解决方案五:
直接就用UTF-8不行吗?为什么非要转成ansi
解决方案六:
response.setHeader("content-Disposition","attachment;filename="+newString(filename.getBytes(),"iso-8859-1"));
解决方案七:
是内容要编码成Ansi,不是文件名
解决方案八:
顶起来,高手回答下
解决方案九:
CSV实际也就是文本文件,这个在写入文件时可以指定文本编码格式的。可以参考下面页面中的代码:BufferedWriterwriter=null;Filefile=newFile("E://wwwroot/download/csv/myCsvFile.csv");try{writer=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(file,false),"GBK"));writer.write(strCsvContent);}finally{if(writer!=null){writer.close();}}