javaで日本語ファイルの文字化けを解消する方法について

このQ&Aのポイント
  • javaでwgetを動作させる際に、日本語のファイルを取り出す際に文字が化けてしまう問題があります。そのため、java言語を用いてwget.exeを動作させ、文字コードを指定することで文字化けを解消する方法を探しています。
  • 現在は、javaのプログラム内にwget.exeの実行コマンドを記述していますが、具体的な文字コードの指定方法がわかりません。どのように指定すれば文字コードの問題が解消できるのか、アドバイスをいただけると助かります。
  • 設定する必要のある文字コードは、取得するファイルの文字コードによって異なります。一般的な日本語のファイルの場合、Shift_JISやUTF-8などが使用されています。適切な文字コードを指定してwget.exeを実行することで、文字化けを解消することができるでしょう。
回答を見る
  • ベストアンサー

javaでwgetを動作させる際に

wget.exeを動作させると、日本語のファイルを取り出す際に文字が 化けてしまうため、java言語を用いてwget.exeを動作させ、文字 コードを指定することによって文字化けを解消させようと考えて おりますが、その方法がわかりません。 アドバイスの方お願いします。 以下は、現在できているソースです。 import java.io.*; public class wget { public static void main(String[] args) { String[] command = {"cmd.exe", "/c", "C:\\wget\\bin\\wget.exe", "-r", "-l", "1", "-k", "-np", "-nv", "http://dmoz.org/World/Japanese/"}; // 例外の発生を調べるブロック try { Runtime runtime = Runtime.getRuntime(); Process load_process = runtime.exec(command); load_process.waitFor(); } // 例外発生時の処理ブロック catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }

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

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

  • ベストアンサー
回答No.2

wgetのことは詳しく知らないですが、添付のプログラムではwgetを起動させているだけなので、コード変換はできないでしょう。(コマンドラインの引数にコード変換ができるオプションがあるなら話は別ですが) wgetのiniファイルかなにかの環境設定に文字コードを指定できるものがあるかもしれませんが、出力されたファイルの文字コード変換を行うなら static void changeEncode(String readfilename, String writefilename, String readencode, String writeencode) { BufferedReader br=null; BufferedWriter bw=null; try { br=new BufferedReader(new InputStreamReader(new FileInputStream(readfilename),readencode)); bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(writefilename),writeencode)); String s; while((s=br.readLine())!=null) { bw.write(s); } } catch (IOException e) { e.printStackTrace(); } finally { try { if(bw!=null) bw.close(); if(br!=null) br.close(); } catch (IOException e) { e.printStackTrace(); } } } のようにしたらよいのではないかと思います。

その他の回答 (1)

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

Java使ってwget起動するくらいならJavaでwgetに相当するものを作った方が楽ですよ。 >その方法がわかりません。 具体的に何がわからないのでしょうか? wgetの出力を得る方法でしょうか? 出力を特定の文字列に変換する方法でしょうか?

kanari501
質問者

補足

ご返事遅れましたm(_ _)m >Java使ってwget起動するくらいならJavaでwgetに相当するものを作った方が楽ですよ。 すいません。ネットワークなどの専門的な知識を持っていないので、どのように作ればよいかチンプンカンプンな状態です。 >具体的に何がわからないのでしょうか? >wgetの出力を得る方法でしょうか? 出力を特定の文字列に変換する方法でしょうか? そうです。載せているソースを実行するとファイルが自動的に生成されるのですが、日本語が化けてしまいます。出力を特定の文字列に変換する方法があれば教えていただけないでしょうか。 よろしくおねがいします。

関連するQ&A

  • プログラムからの返答の意味がわかりません..

    import java.io.*; public class Teme { public static void main(String [] args) { String [] command = { "C:\\Users\\yuzumodoki\\Desktop\\chunkparser-1.0\\chunkparser-1.0\\parser.exe", "aaaa" }; // 外部プログラムを実行 Runtime runtime = Runtime.getRuntime(); Process process = null; try { process = runtime.exec(command); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } // 外部プログラムの標準出力から読み込み BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); System.out.println(br); try { String line; while((line = br.readLine()) != null) { System.out.println(line); } } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } finally { try { br.close(); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } } } } 上記のプログラムはparser.exeにアクセスし,そのアプリケーションに文字列を送り,処理をしてその結果を取得するというものです. 本来"aaaa"と送ると"(aaaa aaaa)"と返ってくるプログラムなのですが, java.io.BufferedReader@89ae9e と返ってきます.これはなぜだかわかる方いらっしゃいますか?また,aaaa aaaaと本来の値を返すにはどうすればいいかわかる方いらっしゃいませんか.. もしわかる方いらっしゃたら教えて頂けたらすごくうれしいです(つj)

  • JavaAppletのボタンを押すことで、Fortranプログラムが実

    JavaAppletのボタンを押すことで、Fortranプログラムが実行できるようにプログラムを作っています。ですが、今エラーが出て困っています。誰か教えて頂けないでしょうか? 必ず、エラーでディレクトリが見つかりません。とでます。 cdのコマンドでプログラムがある所まで移動したいのですが,どう打てばいいのか分かりません。現在のプログラムは以下のとおりになっています。 OSはLinuxのFedora10です。開発環境としてEclipse使ってます。 try { String command = "./main < input.txt"; //外部プロセス ProcessBuilder pb = new ProcessBuilder(command); //ProcessBuilder構築 Process process = pb.start(); //プロセス実行 process.waitFor(); } catch (Exception e1) { e1.printStackTrace(); }

  • java わからない。

    今、卒業研究でJAVAを扱っています。 しかし、思った動作をするプログラムが作れません。 時間もなくなってきたので、okwaveに投稿しました。 お願いします。 パソコンはwindowsです。 プログラムを実行すると, (1)コマンドプロセッサでdirを実行してくれる。 (2)実行した後にファイルにする。 実行するときは[dir > dir.txt]のようにしたいです。 今まで書いてきた例をいかに描きます。 import java.io.*; public class TestExec1 { public static void main(String[] args) { try { String s1 = "dir"; Process process = Runtime.getRuntime().exec(s1); InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } } どこが間違っているかわかりません。 よろしくお願いします。

  • Runtime#proccessのwait

    //Batch part RunBatch(batchName); //sleep(1000); //B-part Systems.out.println("B-part"); --------------------------------------------------------- public void RunBatch(String BatchName)throws Exception {  Process pr = null;  Runtime runtime = Runtime.getRuntime();  pr = runtime.exec("cmd.exe /c start "+BatchName);  try {    int exitCode = pr.waitFor();    if(process != null) {      process.getErrorStream().close(); process.getInputStream().close(); process.getOutputStream().close(); process.destroy(); }  } catch (Exception e) {   e.printStackTrace();  } } このままですとバッチの処理が長い場合、処理が終了する前にB-partへ 処理が移行してしまいます。 とりあえずでwaitをかけてはいるのですが、完全にバッチ処理が終了 するまでB-partへ移行させない方法はありませんでしょうか? おそらくバッチファイルから結果出力させてJAVA側でフックするとは思うのですが、具体的にどう組めばいいのかが分かりません。

    • ベストアンサー
    • Java
  • 子プロセスで発生した例外を親プロセスでキャッチしたい

    以下のようにプログラムをかいてみましたが、AssertionErrorをキャッチできません。 Fooクラス内のassert文で必ずAssertionErrorが発生するようにしています。 String[] command = {"java", "Foo"}; try{ Process process = runtime.exec(command); } catch(IOException e){ } catch(AssertionError ae){ System.out.println(ae.toString()); }

    • ベストアンサー
    • Java
  • javaからバッチファイル実行

    お世話になります。 javaプログラムからバッチファイルを呼び出して実行するようにしたいのですが、上手くいきません。 サイトを参考に以下のように書いてみましたが、 バッチファイルの一行目のみ実行している?ようで、二行目以降の処理をしていないようです。 バッチファイル単体での実行は正常に動作しています。 お気づきの点がありましたら教えて頂けないでしょうか。 try { String[] cmd = {"バッチファイルのパス"}; Process p = Runtime.getRuntime().exec(cmd); while(true){ try{ p.exitValue(); }catch(IllegalThreadStateException e){ continue; } break; } } catch (IOException e) { e.printStackTrace(); }

    • ベストアンサー
    • Java
  • バッチファイルの起動

    WEBの画面上からボタンをクリックして、バッチファイルを起動させる プログラムを作成しています。 プログラム・バッチ共ローカルで上記のテストを行なった所、正常にバッチを起動することができませんでした。 プログラム・バッチをサーバに移行し上記のテストを行なった所、バッチが起動せきませんでした。 プログラムは以下の通りです。どこが悪くてサーバ上でバッチが起動できないのでしょうか?。 宜しくお願い致します。     (JSP) <hr> <br> <table width="80%"> <tr> <td> <s:submit value=" 入力完了 " cssClass="form_button" action="TEST" method="doEnter" /> </td> </tr> </table> </s:form> </body> <html>     (JAVA) public String doEnter() throws Exception { boolean vCheckResult = true; String result; try { String sCmd = "D:\\bat\\jksys\\atelnet.bat"; ProcessBuilder builder = new ProcessBuilder(sCmd); Process process = builder.start(); int ret = process.waitFor(); System.out.println("process exited with value : " + ret); }catch (IOException e) { // start()で例外が発生 e.printStackTrace(); } catch (InterruptedException e) { // waitFor()で例外が発生 e.printStackTrace(); } return "success"; }

  • Javaプログラムでコマンド実行時のエラー

    Webアプリにて下記プラグラムを実行(Tomcat上で実行)したところ以下のような例外が でました。 cd /home/test/geniatagger-3.0.1 ディレクトリに移動するコマンドで失敗しているようですが Teraterm上で手入力で実行すると実行できます。 何が原因かわかりますでしょうか。 【例外】 java.io.IOException: Cannot run program "cd /home/test/geniatagger-3.0.1": java.io.IOException: error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) at java.lang.Runtime.exec(Runtime.java:610) at java.lang.Runtime.exec(Runtime.java:483) 【実行したプログラム】 String[] command = {"cd /home/test/geniatagger-3.0.1", "./geniatagger", "I had a pen."}; Process process = Runtime.getRuntime().exec(command); //exec()が非同期実行であるため実行結果が返ってくるまで待つ int no = process.waitFor(); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); String str = ""; while (in.ready()) { str = in.readLine(); System.out.println("segmentate=" + str); } in.close();

    • ベストアンサー
    • Java
  • JAVAとGnuplot

    javaからGnuplotを起動させ、グラフのプロットを行いたいのですがうまくいきません。 ソースは String gnuplot_cmd = "plot sin(x)" ; try { p = Runtime.getRuntime().exec("C:~省略~\\wgnuplot.exe"); } catch (IOException e) { e.printStackTrace(); } pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(p.getOutputStream()))); pw.print(gnuplot_cmd); pw.close(); です。 起動はするのですが、プロットの命令がうまく伝わりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • process has not exited

    実行可能なjarファイルをコマンド実行しその戻り値を取得したくて下記プログラムを書きました。 ところがprocess.exitValue() のところで  process has not exited というエラーを起こしてしまいます。原因はお分かりになりますでしょうか。 String command = "java -jar test.jar test; Process process = Runtime.getRuntime().exec(command); System.out.println("▼▼▼実行中のコマンド=" + command); //int no = process.waitFor(); //exec()が非同期実行であるため実行結果が返ってくるまで待つ System.out.println("▼▼▼コマンドの実行完了"); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = null; while ( (line = in.readLine())!=null ) { line = in.readLine(); System.out.println(line); } System.out.println("★★★コマンドの戻り値=" + process.exitValue()); if(process.exitValue() != 0) { process.destroy(); } in.close(); } } catch(Exception e) { if( process != null ) { process.destroy(); } e.printStackTrace(); }

    • ベストアンサー
    • Java

専門家に質問してみよう