• ベストアンサー

handleText()で取得したテキストが文字化けしてしまいます。

タイトルの通りです。入出力について一応自分なりに調べてみましたが、出力したファイルへの文字化けが直りません。下にコードを書いています。 どうかよろしくお願いします。 import java.io.*; import java.net.*; import javax.swing.text.MutableAttributeSet; import javax.swing.text.html.*; import javax.swing.text.html.parser.ParserDelegator; class MyParserCallback extends HTMLEditorKit.ParserCallback { String[] text = new String[1000]; int k=0; public void handleText(char[] data, int pos) { text[k] = new String(data); k++; } } public class test { String[] line = new String[10000]; public test() { try { URL url = new URL("http://www.goo.ne.jp/"); HttpURLConnection uc = (HttpURLConnection) url.openConnection(); uc.setUseCaches(false); BufferedReader br = new BufferedReader(new InputStreamReader(uc .getInputStream())); BufferedWriter bout = new BufferedWriter(new FileWriter("test.txt")); MyParserCallback cb = new MyParserCallback(); ParserDelegator pd = new ParserDelegator(); pd.parse(br, cb, true); for(int i=0; i<cb.text.length; i++) { if(cb.text[i] == null) { continue; } bout.write(cb.text[i]); bout.newLine(); } //終了処理 br.close(); bout.close(); } catch (MalformedURLException e) { System.out.println(e); } catch (IOException e) { System.out.println(e); } } public static void main(String[] args) { test t = new test(); } }

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

InputStreamReader(uc.getInputStream(), "EUC-JP") で、エンコードを指定して取り込む

kamakuragengorou
質問者

お礼

ご返答ありがとうございます。 無事変換できました。 "EUC-JP"→"Shift-JIS"と再変換するのですね。まったく思いつきませんでした。ありがとうございました。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>どのページに書かれているのでしょうか? http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/nio/charset/Charset.html あたりかな・ >"EUC-JP"→"Shift-JIS"と再変換するのですね java では、ユニコードに変換されます。 出力にあたり、標準の(ソースが記述されたコード、あるいはオプションで指定されたコード)コード(この場合Shift_JIS)で出力されます。

kamakuragengorou
質問者

お礼

Charsetクラスに書かれてあったのですね。ご返答ありがとうございました。

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

>BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream())); ここでエンコーディングを指定していないのが原因です。 エンコーディングを指定しないと基本的にプラットフォームのデフォルトエンコーディングが使用されます。なので取得したコンテンツのエンコーディングとプラットフォームのデフォルトエンコーディングがあっていなければ文字化けが起こるのは当然です。 何の文字セットでエンコーディングをすればいいかはJavaDocを見ればわかると思います。

kamakuragengorou
質問者

お礼

ご返答ありがとうございます。 エンコーディング処理が必要なのですね。どうしても文字化けが直らずほんと困ってましたが、何とか直りました。 ちょっと気になったところがあったのですが、 >何の文字セットでエンコーディングをすればいいかはJavaDocを見ればわかると思います。 Javaのドキュメントにはそのようなことも書かれているのですね!しかしどのページに書かれているのでしょうか?どうしても見つけれませんでした。

関連するQ&A