JavaでHTMLを取得し、getBytesで文字コードを変換すると「一部」文字化けする
以下のコードを走らせると、取得したデータの文字列が以下の画像のように一部化けて変換されます。
try {
// 接続用HttpURLConnectionオブジェクト作成
HttpURLConnection con = null;
// URLの作成
URL urlSt = "https://cs.kintetsu-ls.co.jp/TR/TRGG0020/TRGG0020.aspx?ID=1234567890";
url = new URL(urlSt);
con = (HttpURLConnection) url.openConnection();
// リダイレクトを自動で許可しない設定
con.setInstanceFollowRedirects(false);
// URL接続からデータを読み取る場合はtrue
con.setDoInput(true);
// URL接続にデータを書き込む場合はtrue
con.setDoOutput(true);
// 接続
con.connect();
// 本文の取得
InputStream in = con.getInputStream();
String readSt = readInputStream(in);
//文字コードを指定して変換する
readSt = new String(readSt.getBytes("Shift_JIS"));
System.out.println(readSt);//ここでブレークを張って、デバックエリアでreadStの中を覗いて取得文字をキャプチャ
//切断
in.close();
con.disconnect();
} catch (IOException e) {
try {
if (con != null) con.disconnect();
} catch (Exception e2) {
}
e.printStackTrace();
}
public String readInputStream(InputStream in) throws IOException, UnsupportedEncodingException {
StringBuffer sb = new StringBuffer();
String st = "";
BufferedReader br = new BufferedReader(new InputStreamReader(in, "Shift_JIS"));
while((st = br.readLine()) != null) {
sb.append(st);
}
try {
in.close();
}
catch(Exception e) {
e.printStackTrace();
}
return sb.toString();
}
このように一部文字が化ける場合、どのようにしたら良いのでしょうか。
ご教示いただければ幸いです。
PS:UTF-8を指定すると、以下のようになります。
以下が変換前です。