2012-02-21 42 views
0

我使用此代码从网页中读取数据:从java中的网页读取数据时出错?

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(); 
    } 
} 

的网页给出了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指错误的请求 - 这意味着请求无法被服务器因为语法错误理解....你尝试一些其他的网址? – 2012-02-21 09:35:40

+1

你应该逃避你所有的特殊字符,并在URL – 2012-02-21 09:36:37

回答

1

你的问题是你在一个字符串中使用了一个\(反斜杠),在Java中是一个转义字符。为了得到一个实际的\你需要在你的字符串中有两个。所以:

Wanted text: part1\part2 

你需要有

String theString = "part1\\part2"; 

所以你真正想要

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

此外,当您与您的要求成功,你回来的图像(PNG),它不应该用阅读器阅读,阅读器会尝试将字节解释为使用某种编码的字符,这会破坏图像数据。相反,使用输入流并将内容(字节)写入文件。

一个简单的例子,而不错误处理

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 2012-02-21 13:18:52

+0

你能帮我一些代码或教程吗 – Navdroid 2012-02-21 13:19:15

+0

@Navdroid你在问什么而不是你的问题的答案。您的http问题已解决。您错过的是使用HTTP响应内容的方式。这是一个明显的问题。更新或拆分你的问题不是更好吗? – 2012-02-21 16:26:43

1

我认为你应该考虑转义URL中的反斜杠。我的Java,反斜杠必须在字符串 转义应该成为

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

这是为纯java开始。 看来,这个网址适用于我的浏览器,但正如在其他答案建议,我认为它应该更好地逃脱所有的特殊字符,如反斜杠,鞋带... ...

2

尝试逃避像org .apache.commons.lang.StringEscapeUtils