我在 JBoss 应用程序服务器上运行 JSP 中的这个 Web 应用程序。我正在使用Servlet 来获取友好的 url。我正在通过我的 JSP 和 Servlet 发送搜索参数。我正在使用带有文本框的表单,Servlet
第一个 Servlet 用于request.getParameter()
获取文本,并将其发送到另一个 Servlet response.sendRedirect
(将 URL 屏蔽为“友好”的东西)。这个最终的 Servlet 用于request.getRequestDispatcher().forward()
以“丑陋”的方式将参数发送到 JSP searchResults.jsp?searchParameters=Parameters
:.
现在,当显示搜索结果页面时,URL 会显示带有“友好 url”的正确搜索词。示例:http://site.com/search/My-Search-Query
即使使用特殊字符,例如:http://site.com/search/Busqué-tildes-y-eñies
. 但是当我尝试在我的 JSP 中使用该搜索词时,特殊字符无法正确显示。
整个系统使用i18n,到目前为止我们没有遇到特殊字符的问题。但是当信息通过表单发送时(比如从 index.jsp 到 searchResults.jsp),特殊字符不会正确显示:
á - á
é - é
í - Ã
ó - ó
ú - ú
ñ - ñ
整个代码库应该是 UTF-8,但显然我在传递参数时遗漏了一些东西。正如我所说,它们正确显示在 URL 中,但不在 JSP 中。
我正在考虑á
手动转换它们,但我想有一种更好的方法可以正确地使用正确的编码。此外,以后可能会有我现在可能不知道的新字符(法语、西班牙语等)
以防万一,我会让你知道我在每个 JSP 上都有这些行:
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
编辑
感谢您的回答。我尝试了几件事,但没有解决问题。
这是我所做的:
我添加了一个 ServletRequestListener,它将会话的字符编码设置为 UTF-8,并为每个 Http 请求添加了一个过滤器,其作用相同。
正如我所说,JSP 中的所有内容都使用 UTF-8 编码(请参阅相关标题)。
我将 Servlet 的字符编码打印到控制台,默认情况下为空,将它们设置为 UTF-8,就像 @kgiannakakis 和 @saua 说的那样。
这些操作都不能解决问题。我想知道这是否还有其他问题...