Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
739 views
in Technique[技术] by (71.8m points)

file upload - primefaces fileupload filter with utf8 characters filter

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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");

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...