このサーブレットを使用して、別のドメインから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コンテンツで「&nbsp」ではなく「Â」が表示されます。
これらは実際にはこのからのresponseTextに含まれていProxyServlet
ます。応答コンテンツタイプと出力ストリーム文字セットを明示的に定義することでこれを処理できると思いましたが、何かが足りないに違いありませんか?誰かが以前にこれを解決したことがありますか。