![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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");
}
}
}
No.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でやっぱり文字化けします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- Java java final 1 2022/06/10 22:49
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaでデータに登録する度にID...
-
yyyymmddからyyyy/mm/d...
-
java連結
-
csv出力について
-
Java int sum = 0は必要ですか?
-
ソケットを使ったサーバとクラ...
-
「プログラミング」JAVAの...
-
「テキストファイルをリソース...
-
javaでクッキーを取得したい
-
JAVAで、SSL通信
-
テキストファイルから空白行をよむ
-
JAVAでエラーがでる。
-
equalsの逆
-
javaプログラミングの質問です。
-
今勉強中のjavaで。わからない...
-
BufferedReader.readline()で読...
-
java.lang.NoClassDefFoundErro...
-
C言語のポインターに関する警告
-
VBAで配列の計算
-
[JAVA]try 内の変数を外で!?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
equalsの逆
-
csv出力について
-
九九を横に表示する。
-
テキストファイルから空白行をよむ
-
Java int sum = 0は必要ですか?
-
[JAVA]エラーが解決できません。
-
javaのfor文が機能してないみた...
-
InputStream.read()でタイムア...
-
Servletでテキストボックスに入...
-
Javaでデータに登録する度にID...
-
Inputstreamについて
-
BufferedReaderでのエラー
-
FileクラスのcanRead/canWrite...
-
java連結
-
Java 読み込んだテキストファイ...
-
Javaの質問です。テキストファ...
-
テキストファイルの任意の文字...
-
Class.forNameでエラーになる
-
テキストファイルにおいて任意...
おすすめ情報