【问题标题】:primefaces fileupload filter with utf8 characters filter带有 utf8 字符过滤器的 primefaces 文件上传过滤器
【发布时间】:2023-04-05 11:33:02
【问题描述】:

我在 primefaces 3 中遇到了 utf-8 编码问题。但是使用 this(在 web.xml 中添加字符编码过滤器),我的问题解决了。但是我的 web.xml 中有另一个用于 primefaces 文件上传的过滤器。在有文件上传的页面中,即使没有上传任何内容,我的字符编码过滤器也不起作用,并且 utf-8 字符集具有未知值,就像没有上传过滤器时一样。我怎样才能一起使用这个过滤器?

【问题讨论】:

    标签: file-upload jsf-2 utf-8 character-encoding primefaces


    【解决方案1】:

    基本上,您需要以下代码行来解决此问题:

    new String(file.getFileName().getBytes(Charset.defaultCharset()), "UTF-8")
    

    【讨论】:

      【解决方案2】:

      这是 PrimeFaces 的 MultipartRequest 中的一个错误。它对表单字段使用平台默认字符编码,而不是 HTTP servlet 请求中设置的字符编码过滤器中的HttpServletRequest#setCharacterEncoding()(我假设它已映射到web.xml 之前 PrimeFaces FileUploadFilter)。

      基本上,PrimeFaces 3.3 中 MultipartRequest 的第 85 和 88 行

      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。同时,最好的办法是手动修复 backing bean action 方法中不正确的字符串编码,假设服务器平台默认编码为 ISO-8859-1:

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

      【讨论】:

      • addFormParam 方法没有请求参数,所以我将请求参数作为 addFormParam(HttpServletRequest request, FileItem item) 发送到此方法,我按照您所说的做了:formParams.get(item.getFieldName()) ).add(item.getString(request.getCharacterEncoding()));但它没有用!我能做什么?
      • 我编辑了答案,还有一行需要更改。 request. 可以省略,它是HttpServletRequestWrapper
      • 亲爱的 BalusC, 感谢您的帮助。我的问题解决了
      猜你喜欢
      • 1970-01-01
      • 2012-05-28
      • 2012-12-16
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 2018-02-03
      • 2012-08-22
      • 2012-11-01
      相关资源
      最近更新 更多