gpt4 book ai didi

java - 如何处理 Java 中的字符集差异

转载 作者:行者123 更新时间:2023-12-01 15:25:51 24 4
gpt4 key购买 nike

我正在使用此 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 内容中,我仍然得到“”而不是“ ”。

它们实际上包含在该ProxyServlet 的responseText 中。我认为显式定义响应内容类型和输出流字符集可以处理这个问题,但我一定错过了一些东西?以前有人解决过这个问题吗?

最佳答案

您可以通过 byte[] 缓冲区从一个字节流复制到另一个字节流,而不是将字节流转换为字符,反之亦然。或者使用 Spring 实用程序:

FileCopyUtils.copy(uri.getInputStream(), response.getOutputStream());

或明确:

byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead = -1;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.flush();

它将保证数据按原样复制(不可能通过错误的字符搞砸事情)

关于java - 如何处理 Java 中的字符集差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10155996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com