This is a bug in PrimeFaces' MultipartRequest
. It's using the platform default character encoding for form fields instead of the one set in the HTTP servlet request as done by HttpServletRequest#setCharacterEncoding()
in your character encoding filter (which I assume is been mapped in web.xml
before the PrimeFaces FileUploadFilter
).
Basically, line 85 and 88 of MultipartRequest
in PrimeFaces 3.3
formParams.get(item.getFieldName()).add(item.getString());
// ...
items.add(item.getString());
needs to be changed as follows
formParams.get(item.getFieldName()).add(item.getString(getCharacterEncoding()));
// ...
items.add(item.getString(getCharacterEncoding()));
I have reported it as issue 4266. In the meanwhile, your best bet is to manually fix the incorrect string encoding in the backing bean action method as follows, assuming that the server platform default encoding is ISO-8859-1:
string = new String(string.getBytes("ISO-8859-1"), "UTF-8");
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…