![](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の質問です。テキストファ...
-
[JAVA]エラーが解決できません。
-
テキストファイルにおいて任意...
-
入力文字列が数字かどうかの判別
-
equalsの逆
-
Java言語 漢字とひらがなの判別
-
yyyymmddからyyyy/mm/d...
-
Java int sum = 0は必要ですか?
-
C言語 重複しない4ケタの乱数...
-
java
-
ORA-01858: 数値を指定する箇所...
-
hiddenの値が期待した値で取得...
-
オブジェクトの中のプロパティ...
-
プログラミングの問題です。大...
-
System.err. printlnとSystem.o...
-
ダブルクォーテーションを含む...
-
ダブルクォーテーションのrepla...
-
Path型をString型へ変換する(Java)
-
javaで質問です。 文字列2023/2...
-
JAVAのServletで、画像表示につ...
マンスリーランキングこのカテゴリの人気マンスリー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でエラーになる
-
テキストファイルにおいて任意...
おすすめ情報