Java中如何处理字符集差异
我使用这个servlet从另一个域提取HTML内容,并将其包含在我自己的Ajax页面中,它将响应指定为“UTF-8”: 我提取的文档有一个元标记,如下所示:Java中如何处理字符集差异,java,html,utf-8,character-encoding,Java,Html,Utf 8,Character Encoding,我使用这个servlet从另一个域提取HTML内容,并将其包含在我自己的Ajax页面中,它将响应指定为“UTF-8”: 我提取的文档有一个元标记,如下所示: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta> 我复制并粘贴到我自己的页面上,使其完全匹配。根据浏览器页面信息,它肯定使用“UTF-8”编码。然而,在提取的html内容中,我仍然会得到“而不是” 它们实际上包含
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
我复制并粘贴到我自己的页面上,使其完全匹配。根据浏览器页面信息,它肯定使用“UTF-8”编码。然而,在提取的html内容中,我仍然会得到“而不是”
它们实际上包含在这个
ProxyServlet
的responseText中。我认为显式地定义响应内容类型和输出流字符集可以处理这个问题,但我肯定遗漏了什么?以前有人解决过这个问题。您可以通过byte[]缓冲区从ony字节流复制到另一个字节流,而不是将字节流转换为chars,反之亦然。或者使用Spring util:
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();
它将保证数据按原样复制(不可能通过错误的字符把事情搞砸)
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead = -1;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.flush();