英語以外の文字を含む映画名「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();
}
しかし、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"));