字符编码JSP在JSP中显示错误但在URL中不显示:"á»Ã¡é»Ã©"

Fer*_*ano 13 encoding jboss jsp tomcat utf-8

我在JBoss Application Server上运行的JSP中有这个Web应用程序.我正在使用Servlets进行友好的网址.我通过我的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请求设置一个Filter,它执行相同的操作.

  • 正如我所说,JSP中的所有内容都使用UTF-8进行编码(请参阅相关标题).

  • 我将Servlets的字符编码打印到控制台,默认为null,将它们设置为UTF-8,如@kgiannakakis和@saua所说.

这些操作都没有解决问题.我想知道这是否有其他问题......

小智 11

尝试在{jboss.server} /deploy/jboss-web.deployer/server.xml中设置URIEncoding.

例如:

<Connector port="8080" address="${jboss.bind.address}"    
     maxThreads="250" maxHttpHeaderSize="8192"
     emptySessionPath="true" protocol="HTTP/1.1"
     enableLookups="false" redirectPort="8443" acceptCount="100"
     connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
Run Code Online (Sandbox Code Playgroud)


kgi*_*kis 7

只是一个疯狂的猜测.在JSP/Servlet中尝试这个:

if(request.getCharacterEncoding() == null) {
   request.setCharacterEncoding("UTF-8");
}
Run Code Online (Sandbox Code Playgroud)

您需要确保将正确的编码传递给您的servlet.


小智 6

response.setCharacterEncoding( "UTF-8");


Arn*_*out 1

首先,我不知道如何解决这个问题,因为我对Java和JSP了解不多。

话虽如此:表格右侧的字符是左侧的 UTF-8 编码。也就是说,在代码中的某个位置,您将字节解释为 Latin-1(或任何默认编码),它们实际上表示 UTF-8 编码的字符...