我正在使用这个 servlet 从另一个域中提取 HTML 内容以包含在我自己的带有 Ajax 的页面中,它将响应指定为“UTF-8”:
public class ProxyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException {
String urlString = request.getParameter("url");
try {
URL url = new URL(urlString);
url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF8"), true);
char[] buf = new char[4 * 1024];
int len;
while ((len = reader.read(buf, 0, buf.length)) != -1) {
out.write(buf, 0, len);
}
out.flush();
}
catch (MalformedURLException e) {
throw new ServletException(e);
}
catch (IOException e) {
throw new ServletException(e);
}
}
}
我正在提取的文档有一个这样的元标记:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
我将它复制并粘贴到我自己的页面上,因此它完全匹配。根据浏览器页面信息,它肯定使用“UTF-8”编码。然而,在提取的 html 内容中,我仍然得到“”而不是“ ”。
它们实际上包含在 this 的 responseText 中ProxyServlet
。我认为明确定义响应内容类型和输出流字符集可以处理这个问题,但我一定遗漏了什么?以前有没有人解决过这个问题。