使用UTF-8编码在JSP中不起作用

使用UTF-8编码在JSP中不起作用,jsp,servlets,encoding,character-encoding,aem,Jsp,Servlets,Encoding,Character Encoding,Aem,我使用以下jsp搜索一些文本: <%@page session="false" contentType="text/html; charset=utf-8" %> .. ... <form method="post" action="searchPageAction.html"> <input type="text" name="search_value" value="ö-Test"/> </form> ... 现在,当我搜索“ö

我使用以下jsp搜索一些文本:

<%@page session="false" contentType="text/html; charset=utf-8" %>
..
...
<form method="post"  action="searchPageAction.html">
    <input type="text" name="search_value"  value="ö-Test"/>
</form>

...
现在,当我搜索“ö-Test”示例时,浏览器中会写入以下链接:

我期望:

=ö-Test&charset=UTF-8


文本
ö-Test
在searchResult.html中作为
和#65533列出prinet-测试
。如何在UTF-8中正确编码?我做错了什么?

您需要设置默认参数编码,该编码可以通过主Servlet设置进行配置,即-

http://localhost:4502/system/console/configMgr/org.apache.sling.engine.impl.SlingMainServlet
最后一个选项,
sling.default.parameter.encoding
应设置为UTF-8,否则将返回到默认值,如帮助文本中所述:

用于将请求参数解码为字符串的默认请求参数编码如果未设置此属性,则按照Servlet API规范的要求,默认编码为“ISO-8859-1”。如果未将“charset”请求参数设置为其他(支持的)字符编码,则使用此默认编码。确保始终使用相同编码(例如UTF-8)的应用程序可以在此处设置此默认值,并且可以忽略“charset”请求参数


为避免在每个环境中的Felix控制台中手动执行此操作,部署代码时Felix控制台将配置此设置。

如果查询字符串中未正确显示参数,则客户端代码可能未正确设置编码。
ö-Test
的正确URL编码值应该是
%C3%B6 Test
,因此这就是您希望在查询字符串中看到的内容。一旦正确显示,服务器端默认编码将发挥作用。您希望在搜索该示例时看到以下内容:

http://www.testproject:4502/content/myProject/searchResult.html?q=%C3%B6-Test&charset=UTF-8
当表单加载到浏览器中时,浏览器检测并选择使用什么编码来呈现页面?您可能需要添加适当的元标记:

HTML 4.01:
HTML5:

或者尝试

例如,我尝试了一个带有
的表单,得到的查询字符串是
%F6 Test
,但当我使用
时,得到的查询字符串是
%C3%B6 Test
,这似乎表明浏览器中的编码不正确

也检查这个问题:它可能不是直接相关的,但它列出了一些要考虑的因素。 这解决了我的问题

searchValue= URLEncoder.encode(searchValue, "UTF-8");
这对我很有用:

String(request.getParameter("q").getBytes("ISO-8859-1"))

谢谢你的回答。我已经将选项sling.default.parameter.encoding设置为UTF-8,但没有任何变化:(虽然这个答案可能是正确的和有用的,但最好是随附一些解释来解释它如何帮助解决问题。如果有变化(可能不相关),这在将来会变得特别有用)这会导致它停止工作,用户需要了解它曾经是如何工作的!
String(request.getParameter("q").getBytes("ISO-8859-1"))