java - 获取请求的 UTF-8 JSF 编码参数

标签 java http jsf encoding utf-8

我在获取以 UTF-8 编码的请求查询参数时遇到问题

请求网址

本地主机:8080/page?searchKey=%D9%85

查询字符串参数

搜索关键字:m

当尝试通过此代码获取此请求的参数时:

 String searchKey=((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()).getParameter("searchKey");
if (!StringUtil.isEmpty(searchKey)) {
    try {
        System.out.println("SearchKey--------Before-------------------"+searchKey);
       searchKey=URLDecoder.decode(searchKey, "UTF-8");
    } catch (UnsupportedEncodingException ex) {

    }
    System.out.println("SearchKey---------------------------" + searchKey);
    }

这两个system.out打印以下内容:

搜索关键字--------之前------------------�?//一个正方形

搜索关键字----------之后-----------------�?//一个正方形

所以我需要捕获 :%D9%85 值,该值是请求将其解码为 UTF-8 那么如何做到这一点

我可以从 ((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()).getQueryString() 获取它,但这将是一项巨大的工作,是否有另一种方法来获取此编码的 utf 参数

提示:使用的语言是阿拉伯语

最佳答案

HttpServletRequest#getParameter() 提供的请求参数(以及它的 JSF flavor 外观 ExternalContext#getRequestParameterMap() ,您实际上应该使用它,而不是用 javax.servlet.* 工件污染您的 JSF beans,或者更好的是 @ManagedProperty<f:viewParam> ,但除此之外)已经URLDecoder再次。如果您想获取原始参数以便自己解码它们,那么您确实应该使用 HttpServletRequest#getQueryString()相反,您自己解析参数名称-值对。

在您的特定情况下,容器似乎使用错误的编码来解码查询字符串参数。大多数容器确实天真地默认为 HTTP 1.1 强制要求的 ISO-8859-1,而这实际上已经不是这个十年的事了。

因此,基本上,您需要明确告诉容器使用 UTF-8 来解码查询字符串参数。不幸的是,您没有告诉任何地方您正在使用哪个容器,所以我无法详细回答。我假设 Tomcat 作为一般示例:您需要编辑其 /conf/server.xml添加URIEncoding属性为<Connector>值为 UTF-8 的元素.

<Connector ... URIEncoding="UTF-8" />

如果您使用不同的容器,只需使用您刚刚从该答案中了解到的新关键字查阅其文档即可。

关于java - 获取请求的 UTF-8 JSF 编码参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20244626/

相关文章:

angular - http.get 似乎没有执行

Java: get+clear atomic for map

java - Jasper Dynamic Reports - 使用 jasper reports 生成出现错误的报告

c# - 转发请求时 ClientConnectionFailure

jsf - Omnifaces cdi 参数和 JSF 2.3 之间的冲突

jsf - 单击按钮时如何重新加载页面?

jsf - 如何在单击 JSF 按钮时调用 JS 函数并阻止页面重新加载/导航?

java - 安卓.content.res.Resources$NotFoundException : File from xml type layout resource ID #0x1020014

java - 当您事先不知 Prop 体的消息类型是什么时,如何使用 Protocol Buffers 从 InputStream 进行解析?

sockets - 连接超时和套接字超时建议