2012-02-21 10 views
0

は、私がWebページからデータを読み取るために、このコードを使用しています:JavaのWebページからデータを読み込む際にエラーが発生しましたか?

public class ReadLatex { 
public static void main(String[] args) throws IOException { 
    String urltext = "http://chart.apis.google.com/chart?cht=tx&chl=1+2%20\frac{3}{4}"; 
    URL url = new URL(urltext); 
    BufferedReader in = new BufferedReader(new InputStreamReader(url 
      .openStream())); 
    String inputLine; 

    while ((inputLine = in.readLine()) != null) { 
     // Process each line. 
     System.out.println(inputLine); 
    } 
    in.close(); 
    } 
} 

Webページは、URL中のラテックスコードの画像を提供します。

私はこの例外を取得しています:私はこの問題を抱えていますし、何がこのためのソリューションであるべき理由

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 400 for URL: http://chart.apis.google.com/chart? 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
at java.net.URL.openStream(Unknown Source) 
at ReadLatex.main(ReadLatex.java:11) 

は誰もが言うことはできますか?

+1

400エラー処理なし

簡単な例では、不正なリクエストを意味します - それは、要求は文法が間違っているため、サーバによって理解することができませんでした意味....あなたには、いくつかの他のURLを試してみました? –

+1

あなたはすべての特殊文字をエスケープしてURLにスラッシュしてください –

答えて

1

あなたの問題は、Javaでエスケープ文字である文字列に\(バックスラッシュ)を使用していることです。実際の文字列を取得するには、文字列に2つの文字列を入れる必要があります。だから、:あなたは

String theString = "part1\\part2"; 

を持っている必要があります

Wanted text: part1\part2 

だから、あなたが実際にあなたがあなたのリクエストに成功したときに、あなたがいけないの画像(png)を取り戻す、また

String urltext = "http://chart.apis.google.com/chart?cht=tx&chl=1+2%20\\frac{3}{4}"; 

をしたいです読者はバイトをある種のエンコーディングを使って解釈しようとするでしょう。これは画像データを破壊します。代わりに、入力ストリームを使用して、コンテンツ(バイト)をファイルに書き込みます。

public static void main(String[] args) throws IOException { 
    String urltext = "http://chart.apis.google.com/chart?cht=tx&chl=1+2%20\\frac{3}{4}"; 
    URL url = new URL(urltext); 

    InputStream in = url.openStream(); 
    FileOutputStream out = new FileOutputStream("TheImage.png"); 

    byte[] buffer = new byte[8*1024]; 
    int readSize; 
    while ((readSize = in.read(buffer)) != -1) { 
     out.write(buffer, 0, readSize); 
    } 
    out.close(); 
    in.close(); 
} 
+0

先生、私は新しいコードを試しましたが、コンソールには判読不能な文字が表示されます。あなたの答えは読んでいますが、 – Navdroid

+0

いくつかのコードやチュートリアルを手伝ってもらえますか? – Navdroid

+0

@Navdroidあなたの質問に対する答えでは何を求めていますか?あなたのhttpの問題は解決されました。あなたが欠けていたのは、HTTP応答コンテンツを使用する方法でした。これは別の問題です。あなたの質問を更新したり分けたりする方がよいでしょうか? –

1

URLのバックスラッシュをエスケープすることを検討する必要があります。私のJava、バックスラッシュが、これは純粋なJavaの開始のためだった

String urltext = 
      "http://chart.apis.google.com/chart?cht=tx&chl=1+2%20\\frac{3}{4}"; 

なるべき文字列 にエスケープする必要があります。 このURLはブラウザで動作しているようですが、他の回答で示唆されているように、バックスラッシュ、レースなどのすべての特殊文字をエスケープする方が良いと思います。

2

orgなどでエスケープしてみてください.apache.commons.lang.StringEscapeUtils

関連する問題