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 UTF-8编码将嵌入非英语字符的JSP中断_Java_Jsp_Utf 8_Character Encoding_Servlet Filters - Fatal编程技术网

Java UTF-8编码将嵌入非英语字符的JSP中断

Java UTF-8编码将嵌入非英语字符的JSP中断,java,jsp,utf-8,character-encoding,servlet-filters,Java,Jsp,Utf 8,Character Encoding,Servlet Filters,我正在尝试使用CharReponseWrapper(我的过滤器会依次调用它)向HttpServletResponse追加额外的内容 为了支持多种语言,如中文和韩文,我必须确保结果内容(附加后)保留原始字符集和编码。因此,我通过调用super.getContentType()获取字符集,并对其进行解析以提取字符集 例如,super.getContentType()可能返回text/html;charset=UTF-8我解析它以提取UTF-8 随后,我在创建PrintWriter对象时提供字符集(该

我正在尝试使用
CharReponseWrapper
(我的过滤器会依次调用它)向
HttpServletResponse
追加额外的内容

为了支持多种语言,如中文和韩文,我必须确保结果内容(附加后)保留原始字符集和编码。因此,我通过调用
super.getContentType()
获取字符集,并对其进行解析以提取字符集

例如,
super.getContentType()
可能返回
text/html;charset=UTF-8
我解析它以提取
UTF-8

随后,我在创建
PrintWriter
对象时提供字符集(该对象包装
OutputStreamWriter
)。(注意:
try/catch
为清晰起见省略)

CharResponseWrapper.java:

public class CharResponseWrapper extends HttpServletResponseWrapper
{
 ....
@Override
  public PrintWriter getWriter() 
  {

            String charEnc = getCharsetFromContentType(getContentType());
            if (charEnc != null) {
                pwriter = new PrintWriter(new OutputStreamWriter(getOutputStream(), charEnc), false);
            } else {
                pwriter = new PrintWriter(getOutputStream());
            }
          }
      return pwriter;
  }
 ....
}
  • 我有一个带有韩文文本的JSP
  • 在该JSP中,指定了
    contentType=“text/html;charset=UTF-8”
    pageEncoding=“UTF-8”
JSP的来源:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    out.println("한글자모 / 조선글");
%>
</body>
</html>

编辑:我尝试在响应的前面添加空字符串,但我仍然面临这个问题

内容似乎没有编码,出于测试目的,您可以尝试使用编码类型UTF8预编译jsp,并将文件放在app classes文件夹中而不是jsp中。

内容似乎没有编码,出于测试目的,您可以尝试使用UTF8编码类型预编译jsp,并将文件放在app classes文件夹中,而不是放在jsp文件夹中。

如果在前面添加一些字符(如空格),是否仍然使用相同的韩文字符?可能是某个servlet过滤器具有固定块大小的缓冲区,其边界无法正确处理多字节序列。如果总是相同的字符,那么我不明白:U+c790=UTF-8[ec 9e 90]似乎没有那么特别。就像一个压缩过滤器,它缓冲前256个字节以检查压缩是否有益。如果在前面添加一些字符(如空格),是否仍然是相同的韩文字符?可能是某个servlet过滤器具有固定块大小的缓冲区,其边界无法正确处理多字节序列。如果总是相同的字符,那么我不明白:U+c790=UTF-8[ec 9e 90]似乎没有那么特别。我检查了Tomcat工作文件夹中的java文件,它是jsp的编译版本。java文件是UTF-8编码的,里面的韩语字符是正确编码的。基本上,从jsp页面到请求、响应对象,您需要在所有层中使用相同的编码。如果您使用eclipse保存文件,然后选中,左键单击文件->属性->签出->文本文件编码。如果它不能解决问题,您可以使用一个过滤器对所有请求进行编码,比如public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)抛出ServletException{request.setCharacterEncoding(“UTF-8”);chain.doFilter(request,response);}我检查了JSP文件的编码。它是UTF-8。我还尝试了
request.setCharacterEncoding(“UTF-8”)也不工作。您是否在您的环境中模拟了此问题?你有工作代码吗?。请发送并帮助我。我们曾经在项目中预编译类文件并将其放在classes文件夹下。而不是直接放置jsp。我检查了Tomcat工作文件夹中的java文件,该文件夹是jsp的编译版本。java文件是UTF-8编码的,里面的韩语字符是正确编码的。基本上,从jsp页面到请求、响应对象,您需要在所有层中使用相同的编码。如果您使用eclipse保存文件,然后选中,左键单击文件->属性->签出->文本文件编码。如果它不能解决问题,您可以使用一个过滤器对所有请求进行编码,比如public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)抛出ServletException{request.setCharacterEncoding(“UTF-8”);chain.doFilter(request,response);}我检查了JSP文件的编码。它是UTF-8。我还尝试了
request.setCharacterEncoding(“UTF-8”)也不工作。您是否在您的环境中模拟了此问题?你有工作代码吗?。请发送并帮助我。我们过去常常预编译类文件并将其放在项目的classes文件夹下,而不是直接放置jsp。
한글��?모 / 조선글