Tôi gặp sự cố với mã hóa utf-8 ở các vị trí số 3. nhưng với this (thêm bộ lọc để mã hóa ký tự trong web.xml), sự cố của tôi đã được giải quyết. Nhưng tôi có một bộ lọc khác để tải tập tin nguyên tố trong tệp tin web.xml của tôi. Trong các trang có tệp tải lên, ngay cả khi không tải lên bất kỳ thứ gì, bộ lọc mã hóa ký tự của tôi không hoạt động và bộ ký tự utf-8 có giá trị không xác định, giống như khi không có bộ lọc để tải lên. Tôi có thể sử dụng bộ lọc này cùng nhau như thế nào?bộ lọc tải lên bộ lọc tập tin có bộ lọc ký tự utf8
7
A
Trả lời
12
Đây là lỗi trong PrimeFaces 'MultipartRequest
. Nó sử dụng mã hóa ký tự mặc định nền tảng cho trường biểu mẫu thay vì một bộ trong yêu cầu servlet HTTP như được thực hiện bởi HttpServletRequest#setCharacterEncoding()
trong bộ lọc mã hóa ký tự của bạn (mà tôi giả định là được ánh xạ trong web.xml
trước PrimeFaces FileUploadFilter
).
Về cơ bản, dòng 85 và 88 của MultipartRequest
trong PrimeFaces 3,3
formParams.get(item.getFieldName()).add(item.getString());
// ...
items.add(item.getString());
cần phải được thay đổi như sau
formParams.get(item.getFieldName()).add(item.getString(getCharacterEncoding()));
// ...
items.add(item.getString(getCharacterEncoding()));
tôi đã thông báo nó như issue 4266. Trong khi đó, đặt cược tốt nhất của bạn là để tự sửa chữa các mã hóa chuỗi sai trong phương pháp hành động đậu ủng hộ như sau, giả định rằng các máy chủ nền tảng mã hóa mặc định là ISO-8859-1:
string = new String(string.getBytes("ISO-8859-1"), "UTF-8");
3
Về cơ bản, bạn cần có sau dòng mã để sửa lỗi này:
new String(file.getFileName().getBytes(Charset.defaultCharset()), "UTF-8")
phương pháp addFormParam không có tham số yêu cầu do đó, tôi gửi request parameter để phương pháp này như addFormParam (HttpServletRequest yêu cầu, FileItem mục) và tôi đã làm những gì bạn nói: formParams.get (item.getFieldName())) add (item.getString (request.getCharacterEncoding())); nhưng nó không hoạt động !!! những gì tôi có thể làm được? – zorro6064
Tôi đã chỉnh sửa câu trả lời, có thêm một dòng cần được thay đổi. 'Request.' có thể được bỏ qua, nó là' HttpServletRequestWrapper'. – BalusC
Kính gửi BalusC, Cảm ơn câu trả lời hữu ích của bạn. Vấn đề của tôi đã được giải quyết – zorro6064