2012-06-25 4 views
7

У меня проблема с кодировкой utf-8 в сетях 3. но с this (добавление фильтра для кодировки символов в web.xml), моя проблема решена. Но у меня есть еще один фильтр для файловой загрузки mainfaces в моем web.xml. На страницах, где есть файловая загрузка, даже без загрузки чего-либо, мой фильтр кодировки символов не работает, а набор символов utf-8 с неизвестными значениями, как и при отсутствии фильтра для загрузки. Как я могу использовать этот фильтр вместе?файл с фильтрами utf8 с фильтрами utf8

ответ

12

Это ошибка в PrimeFaces MultipartRequest. Он использует кодировку символов по умолчанию для полей формы вместо одного набора в запросе сервлетов HTTP, как это делается HttpServletRequest#setCharacterEncoding() в вашем кодировании символов (который, как я полагаю, был отображен в web.xmlдо PrimeFaces FileUploadFilter).

В принципе, линия 85 и 88 из MultipartRequest в PrimeFaces 3.3

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:

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

метод addFormParam не имеет параметр запроса, поэтому я послал параметр запроса к этому методу в качестве addFormParam (HttpServletRequest запроса, FileItem пункт) и я сделал то, что вы сказали: formParams.get (item.getFieldName())) добавить (item.getString (request.getCharacterEncoding())). но это не сработало !!! что я могу сделать? – zorro6064

+1

Я отредактировал ответ, есть еще одна строка, которую нужно изменить. 'Request.' может быть опущен, это' HttpServletRequestWrapper'. – BalusC

+0

Уважаемый BalusC, Спасибо за ваш полезный ответ. Моя проблема решена – zorro6064

3

По сути, вам нужен следующую строку кода, чтобы исправить это:

new String(file.getFileName().getBytes(Charset.defaultCharset()), "UTF-8") 
Смежные вопросы