HTML文字コードの読み込みで文字バケが起きる問題について

このQ&Aのポイント
  • EUC-JPのHTMLを読み込むと日本語が正しく表示されない問題について、対処法を教えてください。
  • Shift-JISでは正常に表示できるが、EUC-JPのHTMLを読み込むと文字バケが発生する問題について、解決策を教えてください。
  • ある特定の文字コードで記述されたHTMLを読み込むと、日本語の文字化けが発生する問題に直面しました。どのように対処すればよいでしょうか?
回答を見る
  • ベストアンサー

ある文字コードのHTMLを読み込むと文字バケが…

例えばこのgooの文字コードはEUC-JPなのですが、これを以下のプログラム(抜粋)で読み込むと日本語がおかしくなります。 try {  URL url = new URL(tf.getText());  BufferedReader urlin = new BufferedReader(new InputStreamReader(url.openStream()));  String result = "";  while((result = urlin.readLine()) != null){   System.out.println(result); }  urlin.close(); } Shift-JISだと正常に表示できるのですが… どうかアドバイスをお願いします。

  • Java
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.2

BufferedReader urlin = new BufferedReader(new InputStreamReader(url.openStream(), "AutoDetect")); としてみては?

shotaro777
質問者

お礼

いろいろ調べてみた結果、日本語の文字コードは "JISAutoDetect" にするみたいです。 すごくヒントになりました。 ありがとうございました。

shotaro777
質問者

補足

返答ありがとうございます。 試してみました。 すると、 java.io.UnsupportedEncodingException: AutoDetect というエラーがでました。 何が問題なのか、わかりません…

その他の回答 (1)

  • crimson
  • ベストアンサー率40% (900/2202)
回答No.1

文字コード変換を支援する「NKF32.DLL」が公開されて いますので、これを組み込んでみては?

参考URL:
http://www.vector.co.jp/soft/win95/util/se020949.html

関連するQ&A

  • HTMLが表示されない

        try{       URL url = new URL("https://job.mycom.co.jp/07/regist.cgi");       URLConnection con = url.openConnection();       InputStream is = con.getInputStream();       BufferedReader br = new BufferedReader(new InputStreamReader(is,"EUC-JP"));       BufferedWriter bf = new BufferedWriter(new FileWriter("input.html"));       String temp = null;       while((temp = br.readLine()) != null){         bf.write(temp);       }       br.close();       bf.close();     }catch(Exception e){       e.printStackTrace();     }   } このやり方でHTMLを作成し、開くと、何も表示されません。 どなたか原因を教えてください>< ループ内を System.out.println(temp); に変えて実行するとソースがすべて表示されたので、tempの中身はちゃんと入っていると思われます。

    • ベストアンサー
    • Java
  • 文字コードを変換する

    //このプログラムは、指定されたURLのソースを読むプログラムです。 import java.io.*; //入出力のAPIを実装するのに用います。 import java.net.*; //ネットワークに関するAPIを実相するのに用います。 import java.lang.*; class rss { public static void main(String args[]) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("読み込みたいRSSのURIを入力してください。"); String address = br.readLine(); //URLを標準入力から読み込みます。 URL url = new URL(address); InputStream uin = url.openStream(); BufferedReader in = new BufferedReader(new InputStreamReader(uin)); String source; //ソースファイル一行を格納する文字列変数です。 //指定したURLのソースファイル標準出力します。 while((source = in.readLine()) != null ){ System.out.println(source); } } catch(IOException e){ System.out.println("ソースを読みこめませんでした。"); } } } というプログラムを作ったのですが、 一部のソースファイルが文字化けを起こします。 そのソースがどの文字コードでできているか? そして、それをどうやったら変換したらいいかを 教えてほしいのです。 お願いします。

    • ベストアンサー
    • Java
  • Web ページのテキスト取得

    URL url = new URL("http://www.yahoo.co.jp/"); BufferedReader br = new BufferedReader( new InputStreamReader(url.openStream())); String str; while ((str = br.readLine()) != null) { System.out.println(str); とすればyahooのhtmlが出力されますが、日本語が文字化けします。 対策を教えてください。 また、yahooのようなページのテキスト(htmlタグを除く)だけを取得する方法を教えてください。

    • ベストアンサー
    • Java
  • javaのエンコードについて?

    さまざまなホームページを探して、下記のプログラムでホームページの情報は読み取ることができるようになったのですが、文字化けを起こして見ることができません。 何をどうすれば文字化けを防げるのかまったくわかりません。 ご存知の方、おしえていただけないでしょうか? おねがいいたします。 import java.io.*; import java.net.*; class test{ public static void main(String[] args) throws Exception { URL url = null; BufferedReader in = null; String readString = null; url = new URL("http://www.yahoo.co.jp/"); in = new BufferedReader(new InputStreamReader(url.openStream())); while((readString=in.readLine())!=null) System.out.println(readString); in.close(); } }

    • ベストアンサー
    • Java
  • javaのエンコードについて?

    下記のプログラムでホームページの情報は読み取ることができるようになったのですが、一部ホームページ(UTF-8エンコードのホームページと思われる)、文字化けを起こして見ることができません。 解決する方法を、教えていただけないでしょうか? おねがいいたします。 import java.io.*; import java.net.*; class test{ public static void main(String[] args) throws Exception { URL url = null; BufferedReader in = null; String readString = null; url = new URL("http://www.faireal.net/"); in = new BufferedReader(new InputStreamReader(url.openStream(),"JISAutoDetect")); while((readString=in.readLine())!=null) System.out.println(readString); in.close(); } }

    • ベストアンサー
    • Java
  • javaでクッキーを取得したい

    以下ソースで、ホームページのデータは取得できるのですが、クッキーが必要なページではうまく作動しません。 どのように改良すればよいでしょうか? また、こういったプログラムを作るのに参考になる書籍をご存知でしたら教えてください。 よろしくお願いいたします。 import java.io.*; import java.net.*; class test { public static void main(String[] args) throws Exception { URL url = null; BufferedReader in = null; String readString = null; url = new URL("http://www.yahoo.co.jp"); in = new BufferedReader(new InputStreamReader(url.openStream(),"JISAutoDetect")); while((readString=in.readLine())!=null) System.out.println(readString); in.close(); } }

    • ベストアンサー
    • Java
  • 文字化けします。

    お世話になります。 ソケットでサーバとクライアントを接続しています。 コーディングの概略は次の通りです。 【クライアント】 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"EUC_JP")); out.println("かきくけこ"); System.out.println(in.readLine()); 【サーバ】 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"Shift_JIS")); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); out.println(inputLine); //←これはクライアントでも文字化けしない。 String s1 = "あいうえお"; String u1 = new String(s1.getBytes("xxxxx"), "yyyyy"); out.println(u1); //←文字化けする。 } お伺いしたいのは文字コード変換についてです。 サーバ:RedhatLinux クライアント:Windowsでして、 サーバ側コーディングの String s1 = "あいうえお"; としている文字列を クライアント側の // 読み込んだデータを表示 System.out.println(in.readLine()); で表示したいのですが、文字が化けて(????←このようになります)困っています。 文字コード変換しなければいけないと思うのですが、 getBytesを使うのでしょうか? もしgetBytesを使うならどのように書けばいいのかがわかりません。 分かりにくい説明で申し訳ありませんが、 ご教授ください。宜しくお願いします。

    • ベストアンサー
    • Java
  • HttpのResponseが文字化け

    以下のプログラムの結果が文字化けします。 正しい文字コード(EUC-JP)にしているのですが 文字化けしてしまいます。 解消方法を教えて下さい。 ----- import java.net.*; import java.io.*; public class HelloWorldSocketClient { public static void main(String[] args) throws Throwable{ Socket socket = new Socket("www.sumishinam.co.jp", 80); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out.println("GET / HTTP1.0\n"); String buff; while((buff=in.readLine())!=null){ System.out.println(new String(buff.getBytes(),"EUC-JP")); } out.close(); in.close(); socket.close(); } }

  • このアクセスの仕方はOK?

    以下はプログラムの一部ですが、気になったことがあって、 ・指定しているURLに拡張子がないこと。 ・拡張子がなくてもHTML文書はダウンロードしていいのか。 です。実際にプログラムを組んでダウンロードできたんですが、こういうやりかたでやっていいのかよく考えるうちに不安になったので、質問させていただきました。ご教授お願いします。 URL url = new URL("http://ja.wikipedia.org/wiki/SMAP"); InputStreamReader in = new InputStreamReader(url.openStream(),"UTF-8"); BufferedReader br = new BufferedReader(fr); while((line = br.readLine()) != null){ ......

    • ベストアンサー
    • Java
  • java ファイル操作

    現在javaでファイル操作しファイルの文字列を検索したりファイルに文字列を追加したりする ものを作成しています。 現状のコードはこのような感じです。 class addresskensaku{ public static void main(String[] args)throws IOException{ System.out.println("数字を選択\n1.名前で検索\n2.年齢で検索\n3.出身地で検索\n4.追加"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //1が選択された場合 if(res == '1' || res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 System.out.println("検索結果 :"); while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[0].indexOf(str1) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2' || res == '2'){ System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String ol = o.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp =null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //完全一致 if (ol.equals(words[1])){ // System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //3が入力された場合 if(res == '3' || res == '3'){ System.out.println("出身地を入力してください。"); BufferedReader p = new BufferedReader(new InputStreamReader(System.in)); String pref = p.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[2].indexOf(pref) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //4が入力された場合 追加 if(res == '4' || res == '4'){ //氏名入力 System.out.println("氏名を入力してください。"); BufferedReader n = new BufferedReader(new InputStreamReader(System.in)); String str2 = n.readLine(); //年齢入力 System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String str3 = o.readLine(); //住所入力 System.out.println("住所を入力してください。"); BufferedReader a = new BufferedReader(new InputStreamReader(System.in)); String str4 = a.readLine(); //ファイルに書き込み try{ File file = new File("addressdata.txt"); FileWriter filewriter = new FileWriter(file, true); filewriter.write(str2+","+str3+","+str4+"\r\n"); filewriter.close(); }catch(IOException e){ System.out.println("e"); } } } } これをカプセル化し 各機能ごとにメソッドを分けて作ろうかなと思っています。 結果の出力はmainでやる予定です。