【发布时间】:2016-06-17 11:58:26
【问题描述】:
我正在尝试使用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>
当我尝试使用韩语字符访问 JSP 时,我得到的 �� 很少?浏览器出现乱码。
但我得到的响应页面出现乱码,如下所示。
한글��?모 / 조선글
已编辑:我尝试在响应前面添加空字符串,但我仍然面临问题。
【问题讨论】:
-
如果前面加了一些字符(比如空格)还是一样的韩文字符有关吗?可能是某个 servlet 过滤器具有固定块大小的缓冲区,并且在其边界上无法正确处理多字节序列。如果它总是相同的字符,那么我不明白:U+c790 = UTF-8 [ec 9e 90] 似乎并不特别。就像一个压缩过滤器,它缓冲前 256 个字节以检查压缩是否有益。
标签: java jsp utf-8 character-encoding servlet-filters