在java中从网页读取数据时出错?

在java中从网页读取数据时出错?,java,latex,ioexception,Java,Latex,Ioexception,我正在使用此代码从网页读取数据: 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 =

我正在使用此代码从网页读取数据:

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中提供latex代码的图像

我得到一个例外:

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)

“谁能告诉我为什么我有这个问题,应该怎么解决这个问题?

< P>我认为你应该考虑在URL中逃避反斜杠。”在Java中,反斜杠必须在字符串中转义 它应该成为

String urltext =
            "http://chart.apis.google.com/chart?cht=tx&chl=1+2%20\\frac{3}{4}";
这是纯java的开始。
似乎这个URL与我的浏览器一起工作,但是,正如其他答案中所建议的,我认为最好也能避开所有的特殊字符,如反斜杠、花边……/P>< P>我认为你应该考虑在URL中避开反斜杠。在Java中,反斜杠必须在字符串中转义 它应该成为

String urltext =
            "http://chart.apis.google.com/chart?cht=tx&chl=1+2%20\\frac{3}{4}";
这是纯java的开始。
这个url似乎与我的浏览器配合使用,但正如其他答案中所建议的,我认为最好也避开所有特殊字符,如反斜杠,laces…

尝试使用类似org.apache.commons.lang.StringEscapeUtils的内容进行转义

尝试使用类似org.apache.commons.lang.StringEscapeUtils的内容进行转义

您的问题是在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();
}

您的问题是在字符串中使用了\(反斜杠),而在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();
}

400表示请求不正确-表示由于语法错误,服务器无法理解请求…您是否尝试了其他url?您应该转义所有特殊字符,并在url中使用斜杠400表示请求不正确-表示由于语法错误,服务器无法理解请求…您尝试了其他url吗?您应该在URL中转义所有特殊字符和斜杠先生,我尝试了新代码,但在控制台中显示了不可读的字符。我读了你的答案,但不知道怎么做。@Navdroid你在问什么,而不是你问题的答案。您的http问题已解决。那时您缺少的是使用HTTP响应内容的方法。这是一个截然不同的问题。更新或拆分您的问题不是更好吗?先生,我尝试了新代码,但在控制台中显示了不可读的字符。我读了您的答案,但不知道怎么做。@Navdroid您在问什么,而不是问题的答案。您的http问题已解决。那时您缺少的是使用HTTP响应内容的方法。这是一个截然不同的问题。更新或分割你的问题不是更好吗?