首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导出到CSV编码问题

导出到CSV编码问题
EN

Stack Overflow用户
提问于 2012-04-20 08:50:41
回答 3查看 16.7K关注 0票数 10

我有一个列表网格,在这个列表中,所有的项目都以对话方式正确显示,就像它们在数据库中一样,无论是在本地还是在jboss服务器上。

但是,在jboss服务器上,当我试图导出为csv时,所有的对话框字符都被替换了,所以我得到了类似于ˆ˜coala而不是Școala的内容,尽管列表网格中正确地显示了diacritics。

在本地,在列表网格中显示和导出都很好。

这是我的出口代码:

代码语言:javascript
复制
private void Export() {
  String exportAs = (String) m_ExportForm.getField("exportType").getValue();  
  FormItem item = m_ExportForm.getField("showInWindow");  
  boolean showInWindow =  item.getValue() == null ? false : (Boolean) item.getValue();  

  // exportAs is either XML or CSV, which we can do with requestProperties
  Map<String,String> params= new java.util.HashMap<String, String>();
  params.put("Accept-Charset","utf-8");

  DSRequest dsRequestProperties = new DSRequest();
  dsRequestProperties.setHttpHeaders(params);
  dsRequestProperties.setExportValueFields(true);
  dsRequestProperties.setExportAs((ExportFormat)EnumUtil.getEnum(ExportFormat.values(), exportAs));  
  dsRequestProperties.setExportDisplay(showInWindow ? ExportDisplay.WINDOW : ExportDisplay.DOWNLOAD);

  // TODO: move in user-config
  dsRequestProperties.setExportTitleSeparatorChar("_");
  dsRequestProperties.setExportDelimiter(";");

  dsRequestProperties.setExportFilename("export." + extensionsValueMap.get(exportAs));
  dsRequestProperties.setContentType("text/csv; charset=UTF-8");
  m_Target.Export(dsRequestProperties);

  Close();
}

此外,在我的jboss 7属性文件中,我有以下内容:

代码语言:javascript
复制
<system-properties>
  <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
  <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>

它的作用就像列表网格正确地显示了对话。

而且,在我的web.xml中,我为servlet准备了

代码语言:javascript
复制
<init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
</init-param>

也许我走错了路,这是其他原因造成的。

本地导出的文件和从jboss服务器导出的文件都具有确切的文件大小。

另外,对于Jboss,我为java_opts设置了属性

代码语言:javascript
复制
-Dfile.encoding=UTF-8

编辑:由于建议,添加了params映射。还是一无所获。

EN

回答 3

Stack Overflow用户

发布于 2012-04-23 09:38:58

听起来好像是个字符编码/解码问题。

您的代码在UTF-8编码中生成了一个CSV文件。但是,你用什么程序来读CSV呢?窗户记事本?如果是Windows应用程序,很可能是假定文本文件是ISO-8859-1编码的。

备选案文1:

告诉记事本或Windows应用程序编码。对于记事本,在File/Open对话框中有一个编码下拉列表。把这个切换到UTF-8。

备选案文2:

将源代码中的编码从UTF-8更改为ISO-8859-1,这与ISO-8859-1的默认编码相匹配。改变线路:

代码语言:javascript
复制
dsRequestProperties.setContentType("application/csv; charset=UTF-8");

代码语言:javascript
复制
dsRequestProperties.setContentType("application/csv; charset=ISO-8859-1");

希望能起作用。org.apache.catalina.connector.URI_ENCODING设置不影响文件编码,应该保持原样。

票数 3
EN

Stack Overflow用户

发布于 2012-04-23 09:56:25

我必须承认,在这个星座里,我没有见过charset=...。但是字符集对文本更有意义,所以首先尝试:

代码语言:javascript
复制
dsRequestProperties.setContentType("text/csv; charset=UTF-8");

原因是,能够很好地表示二进制数据的application会使字符集字节编码变得危险。

补充道:我对错误的解释

也许字符串asExport得到了UTF-8,但是给出了一个多字节字符而不是两个字符。这些也在非ASCII的范围内,您的响应以某种方式想要交付ISO-8859-1 (默认拉丁语-1),并编写??。这是两个错误。

你可以检查asExport。为什么写UTF-8不成功尽管字符集=UTF-8.

票数 1
EN

Stack Overflow用户

发布于 2012-05-04 13:10:09

在您的FilterServlets设置中,可能还有一些干扰编码的附加JBoss。可能与身份验证或压缩有关。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10243029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档