当我打印包含一些非英文字符的电影名称“Yôjinbô”( http://www.imdb.com/title/tt0055630/?ref_=chttp_tt_107 )时,它似乎是“Yôjinbô” eclipse中的输出窗口。
我在 Eclipse 或项目属性中找不到任何编码设置。如何正确打印电影名称?
- - - - - - - - - - 更新 - - - - - - - - - -
我找到了问题发生的地方。以下是从 omdbapi.com 获取电影信息的代码当我在 reader.readLine() 之后打印行时,名称错误。
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("movies/movie_" + i + ".txt"), "utf-8"));
sb = new StringBuilder();
ret = new StringBuilder();
title = URLEncoder.encode(movieNames[i], "UTF-8");
sb.append("http://www.omdbapi.com/?");
sb.append("t=").append(title).append("&");
sb.append("y=").append(year).append("&");
sb.append("plot=").append(plot).append("&");
sb.append("r=").append(r);
CloseableHttpClient client = HttpClients.createDefault();
String url = sb.toString();
HttpGet get = new HttpGet(url);
HttpResponse response = client.execute(get);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line = reader.readLine(); // <-------- wrong here
while (line != null) {
System.out.println(line);
writer.write(line);
line = reader.readLine();
}
但是当我直接在 chrome 中粘贴 url ( http://www.omdbapi.com/?t=Y%C3%B4jinb%C3%B4&y=&plot=short&r=json ) 时,响应是正确的。
- - - - - - - - - - 问题解决了 - - - - - - - - - -
我唯一需要做的就是在创建InputStreamReader时设置“UTF8”,如下
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF8"));
感谢你的帮助。
-------------------更多更新-------------------
事实证明,FileReader 和 FileWriter 隐式使用了系统默认的字符编码,这可能会导致问题,应该换成替代品。
// br = new BufferedReader(new FileReader(filename)); // <---- cause encoding problem here
br = new BufferedReader(new InputStreamReader(new FileInputStream(filename), "UTF-8"));