Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Servlet在JSP页面中显示UTF-8文本_Java_Jsp - Fatal编程技术网

Java 从Servlet在JSP页面中显示UTF-8文本

Java 从Servlet在JSP页面中显示UTF-8文本,java,jsp,Java,Jsp,当我试图通过request.setAttribute()在JSP上显示德语文本,例如Zurücksetzen时,结果显示为Zur�cksetzen request.setAttribute("test", "Zurücksetzen"); 我的JSP页面将contentType定义为UTF-8: <%@ page contentType="text/html;charset=UTF-8" %> <!DOCTYPE html> <html lang="en">

当我试图通过
request.setAttribute()
在JSP上显示德语文本,例如Zurücksetzen时,结果显示为
Zur�cksetzen

request.setAttribute("test", "Zurücksetzen");
我的JSP页面将contentType定义为UTF-8:

<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

我用
${test}
简单地显示属性


如果我将请求转发到JSP页面而不是包含JSP,则文本显示正确

前进(工作):
request.getRequestDispatcher(“/WEB-INF/views/index.jsp”).forward(请求,响应)

包括(不工作):
request.getRequestDispatcher(“/WEB-INF/views/index.jsp”)。包括(请求、响应)


我的IDE使用UTF-8


设置ServletResponse的编码:

response.setCharacterEncoding("UTF-8");

回答我自己的问题:

如中所述,默认值如下所示

The default MIME type is text/html for traditional JSP pages; it is text/xml for JSP XML documents.

The default for the page source character encoding (for translation) is ISO-8859-1 (also known as Latin-1) for traditional JSP pages; it is UTF-8 or UTF-16 for JSP XML documents.

The default for the response character encoding is ISO-8859-1 for traditional JSP pages; it is UTF-8 or UTF-16 for JSP XML documents.

The determination of UTF-8 versus UTF-16 is according to "Autodetection of Character Encodings" in the XML specification, at the following location
因此,
Servlet
JSP
页面默认为
ISO-8859-1

request.getRequestDispatcher(“/WEB-INF/views/index.jsp”)。包括(请求、响应)
当您
.include
一个JSP页面时,如上所述,该页面使用默认字符编码(ISO-8859-1)进行编码。为了使用UTF-8编码,必须设置
response.setCharacterEncoding(“UTF-8”)注意:JSP中的ContentType指令被忽略

request.getRequestDispatcher(“/WEB-INF/views/index.jsp”).forward(请求,响应)
如上所述,当您
.forward
到JSP页面,或直接从浏览器访问JSP页面时,页面将使用默认字符编码(ISO-8859-1)进行编码。为了使用UTF-8编码,您必须添加作为JSP页面的第一行,如Spring所述,最好的方法是使用Spring筛选器CharacterEncodingFilter在web.xml中全局设置对UTF-8的响应:

<filter>  
    <filter-name>encodingFilter</filter-name>  
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
    <init-param>  
       <param-name>encoding</param-name>  
       <param-value>UTF-8</param-value>  
    </init-param>  
    <init-param>  
       <param-name>forceEncoding</param-name>  
       <param-value>true</param-value>  
    </init-param>  
</filter>  
<filter-mapping>  
    <filter-name>encodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>

编码滤波器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
编码滤波器
/*  

您的文件是否也使用UTF-8编码保存?
Zur�cksetzen
是在
UTF-8
中显示(或尝试)数据的
ISO-8859-1
结果。您的Java文件是UTF-8吗?如何确定我的Java文件是UTF-8?我用IntellijQuery在Macbook上,谁把问题记下来了!?原因。。。这起作用了:)。但你可能会因为你的简短回答(我喜欢)而失分。太高兴了!我试了好几个小时!谢谢,这是一个非常糟糕的“解决”这个问题的方法。您不需要在响应中显式设置字符编码。这将是非常乏味的。@LuiggiMendoza这就是为什么我使用这样定义的设置实现一个抽象Servlet,然后从具体的Servlet实现。各位,a)请冷静(我看到一条攻击性评论,几秒钟后被删除)b)那些能够提出更好解决方案的人可能会对这个问题给出另一个答案,对吗?不需要宣传。这个问题有很多重复的地方。通过这些检查,查看所有需要考虑的部分。字符编码比人们想象的要复杂得多,所以提出这样的解决方案会给人错误的印象。手动设置响应编码不是一个解决方案,它是一个黑客。