在其中一個項目中,我在表單數據中提供了非英文內容(芬蘭語)。我們在PrimeFaces中使用JSF 2.0。將數據提交給服務器時遇到問題。我提交表單時數據被破壞。只有芬蘭人在這方面變得腐敗。JSF中提交的UTF-8格式正在破壞數據
有沒有人遇到過這個問題,並找到了解決方案?
在其中一個項目中,我在表單數據中提供了非英文內容(芬蘭語)。我們在PrimeFaces中使用JSF 2.0。將數據提交給服務器時遇到問題。我提交表單時數據被破壞。只有芬蘭人在這方面變得腐敗。JSF中提交的UTF-8格式正在破壞數據
有沒有人遇到過這個問題,並找到了解決方案?
這是PrimeFaces 3.0以來的已知問題。這是由它檢查當前HTTP請求是否是ajax請求的方式發生變化引起的。它通過請求參數而不是請求頭標識。在恢復JSF視圖之前首次檢索請求參數時,將使用服務器的默認字符編碼(通常爲ISO-8859-1而非JSF自己的默認字符編碼UTF-8)來解析所有請求參數。有關深入的解釋,請參閱Unicode input retrieved via PrimeFaces input components become corrupted。
其中一個解決方案是創建一個過濾器,它不會request.setCharacterEncoding("UTF-8")
。
@WebFilter("*.xhtml")
public class CharacterEncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
// ...
}
你在提交上傳文件?我開發捷克語的應用程序,這發生在我身上用ICEfaces的文件上傳組件。但在正常情況下,一切都很好。你可以使用Filter設置芬蘭字符集,但它仍然是奇怪的錯誤 –