最近HTML解析プログラムで「〜」が「?」になる。
この本を読んで対策したけど化ける。
対策というのは、031cを〜に変換するのは以前からやっていたんだけど、どうもff5eも〜に変換する必要があるらしいので今回追加。
…だが、化ける。
で、考えてみると〜が化け始めたのはHTMLの自動ダウンロードをPythonからJavaで行うようになってから…。この辺が怪しいような予感がするなー。もしかしてJakarta Commonsのhttpclient使ってHTMLをダウンロードした時点で既に化けているんじゃなかろうか?
→ダウンロードしたファイルを見たら既に「?」に化けていた。やはりhttpclientが犯人だ。
いや、メジャーなライブラリだし使い方の問題の可能性も大。Jakartaプロジェクトの面々 VS 私。凄くメジャーなライブラリ VS 10日前に作った自作AP。さぁ怪しいのはどっち?という話で。
つかファイルに吐いてる処理は私担当じゃん。
String body=EntityUtils.toString(response.getEntity()); (略) fos = new FileOutputStream(cur_url.file); osw = new OutputStreamWriter(fos , "MS932"); bw = new BufferedWriter(osw); bw.write(body);
んー。toStringで取り出してMS932で書き出してるな。
HTML自体は
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
なんだが、じゃあMS932をSJISに変更みたいな方向だと泥沼に嵌りそう。とにかくソケットから読んだHTTPのBODYをそのままファイルする方向で。response.getEntity()はInputStreamなのでそのまま1バイトずつ読むとか。
→EntityクラスにwriteTO( OutputStream )があったのでFileOutputStreamをつなげば解決だった。
binout = new FileOutputStream(cur_url.file);
response.getEntity().writeTo(binout);
なんだよ、無駄な本買ってしまった…。
コメント