Java 当我们从J2EE现代Web应用程序生成可下载文件时,应该使用什么编码?

Java 当我们从J2EE现代Web应用程序生成可下载文件时,应该使用什么编码?,java,csv,web-applications,encoding,Java,Csv,Web Applications,Encoding,我正在一个JSF java项目上使用Eclipse Kepler开发Mac Os 如何使文件在Windows、Mac Os、Linux环境下可下载,而不会因为编码和平台而产生错误的字符 我们是否需要检查客户端使用哪个操作系统来调整编码和用户代理解析 如果您使用UTF-8,那么在基于Unix的操作系统上就可以了,但是如何使用excel在windows中简单地打开它呢 我写这段代码是为了用UTF-8导出。但它会误解Excel中的é&è FacesContext fc = FacesContext.g

我正在一个JSF java项目上使用Eclipse Kepler开发Mac Os

如何使文件在Windows、Mac Os、Linux环境下可下载,而不会因为编码和平台而产生错误的字符

我们是否需要检查客户端使用哪个操作系统来调整编码和用户代理解析

如果您使用UTF-8,那么在基于Unix的操作系统上就可以了,但是如何使用excel在windows中简单地打开它呢

我写这段代码是为了用UTF-8导出。但它会误解Excel中的é&è

FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();

ec.responseReset();
ec.setResponseContentType("text/csv"); 
ec.setResponseCharacterEncoding("UTF-8");

String fileName = "CleanOmicsTracer_Tableau_"+type+".csv";

ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); 

// Now you can write the InputStream of the file to the above OutputStream the usual way.

BufferedOutputStream csvOut = new BufferedOutputStream(ec.getResponseOutputStream());  
BufferedWriter csvWriter = new BufferedWriter(new OutputStreamWriter(csvOut, "UTF-8"));

        csvWriter.append("Etude;Identifiant Analyse;Numero d'inclusion;Identifiant Prelevement;Identifiant Extrait;Technologie;Service;Sous-analyses;Categorie;Date Enregistrement\n");

        for (AnalyseDispatcher aAnalyse : viewedListAnalyse) { // somethings is your List<Something>

            csvWriter
            .append(toCsvField(aAnalyse.getSample().getParticipant().getProject().getStudy_name()))
            .append(';')
            .append(toCsvField("A"+aAnalyse.getId()))
            .append(';').append(toCsvField(aAnalyse.getSample().getParticipant().getId_study()))   .append('\n'); 
         } 
         csvWriter.flush();
         csvWriter.close();
         csvOut.close();

         fc.responseComplete(); 
        }
FacesContext fc=FacesContext.getCurrentInstance();
ExternalContext ec=fc.getExternalContext();
ec.responseReset();
ec.setResponseContentType(“文本/csv”);
ec.setResponseCharacterEncoding(“UTF-8”);
字符串fileName=“CleanOmicsTracer\u Tableau\u”+类型+“.csv”;
ec.setResponseHeader(“内容处置”、“附件;文件名=\”“+文件名+”\”);
//现在,您可以按照通常的方式将文件的InputStream写入上述OutputStream。
BufferedOutputStream csvOut=新的BufferedOutputStream(ec.getResponseOutputStream());
BufferedWriter csvWriter=新的BufferedWriter(新的OutputStreamWriter(csvOut,“UTF-8”);
csvWriter.append(“练习曲;鉴定分析;数字包含;鉴定前期;鉴定额外;技术;服务;来源分析;分类;注册日期\n”);
对于(AnalysizeDispatcher aAnalyse:ViewedListAnalysis){//somethings是您的列表
CSV编写器
.append(toCsvField(aaanalyse.getSample().getParticipant().getProject().getStudy_name())
.append(“;”)
.append(toCsvField(“A”+aaanalyse.getId()))
.append(“;”).append(toCsvField(aaanalyse.getSample().getParticipant().getId_study()).append(“\n”);
} 
csvWriter.flush();
csvWriter.close();
csvOut.close();
fc.responseComplete();
}

CSV字符流的来源是什么

  • 档案
  • 数据库中的blob
您需要确保读取文件的
java.io.Reader
使用正确的编码(即初始文件的编码)。

尝试:

ec.setResponseContentType("text/csv;charset=UTF-8");


你是说任何类型的文件?或者只是一个文本文件?显然是一个CSV文件。是的,在我的例子中是一个CSV。我从一个mysql数据库中检索到数据,该数据库编码为vDEFAULT字符集utf8 COLLATE utf8\u general\u ci;然后我尝试制作一个csv文件,您可以通过单击在浏览器中下载(该文件是在您单击时创建的),响应为ContentType(“text/csv”);字符编码(“UTF-8”);标题(“内容处置”、“附件;文件名=\”“+文件名+\”);我在BufferedOutputStream和BufferedWriter中使用以文件形式写入输出。演示将数据库值转换为字符串的代码。我假设您正在某处使用
java.io.Reader
?我更新了我在想要输出和下载文件时调用的函数。
ec.setResponseContentType("application/csv;charset=UTF-8");