Ошибка при чтении данных с веб-страницы в Java? - PullRequest
0 голосов
/ 21 февраля 2012

Я использую этот код для чтения данных с веб-страницы:

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)

Может кто-нибудь сказать, почему у меня возникла эта проблема, и каким должно быть решение этой проблемы?

Ответы [ 3 ]

2 голосов
/ 21 февраля 2012

Попробуйте убежать с чем-то вроде org.apache.commons.lang.StringEscapeUtils

1 голос
/ 21 февраля 2012

Ваша проблема в том, что вы используете \ (обратную косую черту) в строке, которая в Java является escape-символом. Чтобы получить реальный \ вам нужно иметь два из них в вашей строке. Итак:

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();
}
1 голос
/ 21 февраля 2012

Я думаю, вам следует избегать обратной косой черты в URL. Я Java, обратная косая черта должна быть экранирована в строке Должно стать

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

Это было для чистого начала Java. Кажется, что этот URL работает с моим браузером, но, как предлагается в других ответах, я думаю, что лучше также избегать всех специальных символов, таких как обратная косая черта, кружева ...

...