我正在从 Servlet 中的 Perl 页面读取 HTTP 响应,如下所示:
public String getHTML(String urlToRead) {
URL url;
HttpURLConnection conn;
BufferedReader rd;
String line;
String result = "";
try {
url = new URL(urlToRead);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
while ((line = rd.readLine()) != null) {
byte [] b = line.getBytes();
result += new String(b, "UTF-8");
}
rd.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
我使用以下代码显示此结果:
response.setContentType("text/plain; charset=UTF-8");
PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8"), true);
try {
String query = request.getParameter("query");
String type = request.getParameter("type");
String res = getHTML(url);
out.write(res);
} finally {
out.close();
}
但是响应仍然没有编码为 UTF-8。我做错了什么?
提前致谢。
最佳答案
对 line.getBytes()
的调用看起来很可疑。如果您确定返回的内容是 UTF-8 编码的,您可能应该将其设为 line.getBytes("UTF-8")
。此外,我不确定为什么有必要。从 BufferedReader 中获取数据的典型方法是使用 StringBuilder 继续附加从 readLine 检索到的每个 String > 成结果。 String
和 byte[]
之间的来回转换是不必要的。
将 result
更改为 StringBuilder
并执行以下操作:
while ((line = rd.readLine()) != null) {
result.append(line);
}
关于java - Servlet 的 UTF-8 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868314/