7

我在 primefaces 3 中遇到了 utf-8 编码的问题。但是有了这个(在 web.xml 中添加字符编码过滤器),我的问题就解决了。但是我的 web.xml 中有另一个用于 primefaces 文件上传的过滤器。在有文件上传的页面中,即使没有上传任何内容,我的字符编码过滤器也不起作用,并且 utf-8 字符集具有未知值,就像没有上传过滤器时一样。我怎样才能一起使用这个过滤器?

4

2 回答 2

12

这是 PrimeFaces 中的一个错误MultipartRequest。它对表单字段使用平台默认字符编码,而不是在 HTTP servlet 请求中设置的字符编码过滤器(我假设它在 PrimeFaces之前HttpServletRequest#setCharacterEncoding()被映射)。web.xml FileUploadFilter

基本上,MultipartRequestPrimeFaces 3.3的第 85 和 88 行

formParams.get(item.getFieldName()).add(item.getString());
// ...
items.add(item.getString());

需要更改如下

formParams.get(item.getFieldName()).add(item.getString(getCharacterEncoding()));
// ...
items.add(item.getString(getCharacterEncoding()));

我已将其报告为issue 4266。同时,最好的办法是手动修复支持 bean 操作方法中不正确的字符串编码,如下所示,假设服务器平台默认编码为 ISO-8859-1:

string = new String(string.getBytes("ISO-8859-1"), "UTF-8");
于 2012-06-26T11:57:10.917 回答
5

本质上,您需要以下代码行来解决此问题:

new String(file.getFileName().getBytes(Charset.defaultCharset()), "UTF-8")
于 2014-01-06T22:01:36.047 回答