【发布时间】:2013-03-29 21:33:29
【问题描述】:
我正在从 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。我做错了什么?
提前致谢。
【问题讨论】:
-
在您的 PrintWriter 中,是否有可能“UTF8”不存在但“UTF-8”存在?
-
我试图更改它但无济于事(已编辑)
-
你怎么知道它不是 UTF-8?
-
您有什么证据表明
urlToRead正在以UTF-8 格式返回其内容?正如你所假设的那样。当您已经拥有String时,为什么还要将line转换为bytes?