primefaces fileupload过滤器,带有utf8字符过滤器

时间:2012-06-25 13:13:23

标签: file-upload jsf-2 utf-8 character-encoding primefaces

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

2 个答案:

答案 0 :(得分:12)

这是PrimeFaces'MultipartRequest中的错误。它使用表单字段的平台默认字符编码,而不是HTTP servlet请求中设置的那个,就像您在字符编码过滤器中HttpServletRequest#setCharacterEncoding()所做的那样(我假设它已在web.xml 中映射 PrimeFaces FileUploadFilter)。

基本上,PrimeFaces 3.3中MultipartRequest的第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。同时,假设服务器平台的默认编码为ISO-8859-1,最好的办法是在backing bean动作方法中手动修复错误的字符串编码,如下所示:

string = new String(string.getBytes("ISO-8859-1"), "UTF-8");

答案 1 :(得分:5)

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

new String(file.getFileName().getBytes(Charset.defaultCharset()), "UTF-8")