dポイントプレゼントキャンペーン実施中!

javaとYahooのWebサービスを利用して、検索結果のxmlを取り出し、
○○.xmlという引数を与えて、結果を書き出そうとしていますが、
以下のプログラムだと文字(日本語)が化けてしまいます。
どうにかして文字化けせず取り出すことはできないでしょうか。
よろしくおねがいします。

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStream;
import java.net.URL;

public class YahooWebServiceExample {

public static void main(String[] args) {
String request = "http://api.search.yahoo.co.jp/WebSearchService/V …
appid=web_research&query=%e6%b2%96%e7%b8%84&results=2";
try {

// ファイル出力ストリームを取得(第二引数)
BufferedWriter bw = new BufferedWriter(new FileWriter(args[0]));

URL url = new URL(request);
InputStream in = url.openStream();
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
for (int i = 0; i < len; i++) {
System.out.print((char) buf[i]);
bw.write(buf[i]);
}
}
in.close();
bw.close();
} catch (Exception e) {
System.out.println("Web services request failed");
}
}
}

A 回答 (1件)

バイトストリームから読み込んだデータを、文字コード変換せずに文字ストリームに書き出しているので、文字化けが起こっています。

ですので、文字コード変換を行うか、バイトストリームへ書き出しを行うかすれば文字化けしなくなります。
ファイル出力ストリームの宣言からcatchの前までを例示すると、

○コード変換する場合
// ファイル出力ストリームを取得(第二引数)
BufferedWriter bw = new BufferedWriter(new FileWriter(args[0]));

URL url = new URL(request);
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));
char[] buf = new char[1024];
int len;
while ((len = br.read(buf,0,1024)) != -1) {
for (int i = 0; i < len; i++) {
System.out.print(buf[i]);
bw.write(buf[i]);
}
}
br.close();
bw.close();

○バイトストリームへ書き出しを行う場合
// ファイル出力ストリームを取得(第二引数)
BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(args[0]));

URL url = new URL(request);
InputStream in = url.openStream();
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) != -1) {
for (int i = 0; i < len; i++) {
System.out.print(buf[i]);
bo.write(buf[i]);
}
}
in.close();
bo.close();

のようになるかと思います。
バイトストリーム書き出しの場合は、System.out.printlnでやっぱり文字化けします。
    • good
    • 0
この回答へのお礼

おかげさまでうまく文字化けせずに出力させることができました!
ありがとうございました!

お礼日時:2007/01/05 20:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!