您不会将 JSF 生成的 HTML 代码与您在浏览器的状态或地址栏中看到的任何内容混淆吗?当然,它已经在生成的 HTML 代码中完全进行了 URL 编码。我刚刚做了一个快速测试,根据浏览器中的查看源代码,它生成了(假设您没有更改 UTF-8 的 JSF2/Facelets 默认响应编码)以下 HTML:
<a href="index.jsf?test=%21+%C3%A5%C3%B6%C3%A4">Login page</a>
但实际上,index.jsf?test=%21+åöä当您悬停链接时,Chrome 和 Firefox 会显示在浏览器的状态栏中,单击链接时也会显示在地址栏中。这只是浏览器特定的功能,这是完全不同的事情。
我不确定你的具体问题是什么,因为你没有告诉任何关于它的事情,但是你提出问题的方式给我的印象是请求 URL 没有被有问题的 servletcontainer 正确地 URL 解码,因此你访问请求参数时收到mojibake 。
正如您现在可能已经猜到的,这必须在 servletcontainer 方面解决。还不清楚您使用的是哪一个,因此这里有一些 Tomcat 和 Glassfish 的示例:
在 Tomcat 中,您需要将Tomcat 中元素的URIEncoding属性设置为.<Connector>server.xmlUTF-8
<Connector ... URIEncoding="UTF-8">
在 Glassfish 中,您需要<parameter-encoding>添加/WEB-INF/glassfish-web.xml:
<parameter-encoding default-charset="UTF-8" />
至于“解析”(实际上,“编码”是正确的术语)空格+,我不确定你为什么指出这一点,但这只是 URL 查询字符串中的空格应该如何编码。我认为您期望它是%20,但这只是 URL 的层次结构部分(查询字符串之前的部分,由 分隔?)中的空格应该如何编码。