我们一直面临一个问题,即从PrimeFaces导出的具有预期阿拉伯名称的文件具有空白(作为名称)而不是文本,后跟扩展名,如"的.csv&#34 ;.文件的内容以阿拉伯语显示。我们有Apache-Tomcat 6.0.29服务器。我调试并发现该文件的名称是阿拉伯语,直到return语句(下面给出的Java代码),但之后无法调试。尝试在这里接受的答案Primefaces fileDownload non-english file names corrupt中给出的解决方案,但它对我没用,因为我使用的是Firefox。我们已经在 server.xml 中的连接器标记中设置了 URIEncoding =" UTF-8" 的属性。
XHTML:
<p:commandLink id="export" ajax="false" > Export
<p:fileDownload value="#{groupView.export}"/>
</p:commandLink>
爪哇:
public StreamedContent getExport() {
String content = "Any text in Arabic or English";
// send CSV file to browser
InputStream is;
StreamedContent file = null;
try {
is = new ByteArrayInputStream(content.getBytes("UTF-8"));
file = new DefaultStreamedContent(is, "application/csv", "المشاركات.csv","UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return file; //FILE NAME IS IN ARABIC TILL HERE
}
PS:我尝试通过普通的Java创建具有阿拉伯名称的文件,但它确实有效。
答案 0 :(得分:0)
我分享的帖子中接受的答案适用于大多数浏览器,但Firefox。为了解决这个问题,我在contentDisposition
标记中使用了p:fileDownload
属性。这种语法有点奇怪,但它的工作原理。星号和单引号是其中的一部分。
<p:fileDownload value="#{groupView.export}" contentDisposition="inline; filename*=utf-8''%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B1%D9%83%D8%A7%D8%AA.csv"/>
在正常情况下,这个编码文本将从bean传递,但为了清楚起见我已添加。