I have a problem with utf-8 encoding in primefaces 3. but with this (adding filter for character encoding in web.xml), my problem solved. But I have another filter for primefaces fileupload in my web.xml. In pages that there is fileupload, even without uploading anything, my character encoding filter don't work and utf-8 character sets with unknown values, just like when there was no filter for uploading. How I can use this filter together?
Asked
Active
Viewed 9,805 times
2 Answers
12
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");

BalusC
- 1,082,665
- 372
- 3,610
- 3,555
-
addFormParam method doesn't have request parameter so i sent request parameter to this method as addFormParam(HttpServletRequest request, FileItem item) and i did what you told : formParams.get(item.getFieldName())).add(item.getString(request.getCharacterEncoding())); but it didn't work !!! what i can do? – zorro6064 Jun 27 '12 at 07:47
-
1I edited the answer, there's one more line which needs to be changed. The `request.` can be omitted, it's a `HttpServletRequestWrapper`. – BalusC Jun 27 '12 at 10:36
5
Essentially, you need the following line of code to fix this:
new String(file.getFileName().getBytes(Charset.defaultCharset()), "UTF-8")

Tires
- 1,529
- 16
- 27