Самый простой способ правильно загрузить HTML из веб-страницы в строку в Java

Машинный код является двоичным (1's и 0) код, который может быть выполнен непосредственно ЦП. Если бы необходимо было открыть файл машинного кода в текстовом редакторе, то Вы видели бы мусор, включая непечатные символы (не, не те непечатные символы;)).

Объектный код является частью машинного кода, который еще не был связан в полную программу. Это - машинный код для одной конкретной библиотеки или модуля, который составит завершенный продукт. Это может также содержать заполнителей или смещения, не найденные в машинном коде завершенной программы. компоновщик будет использовать этих заполнителей и смещения для соединения всего вместе.

Ассемблерный код является простым текстом и (несколько) человеческим читаемым исходным кодом, который главным образом имеет прямое 1:1 аналог с машинными командами. Это выполняется с помощью мнемоники для фактических инструкций, регистров или других ресурсов. Примеры включают JMP и MULT для инструкций по переходу и умножению ЦП. В отличие от машинного кода, ЦП не понимает ассемблерный код. Вы преобразовываете ассемблерный код в машину с использованием ассемблер или компилятор , хотя мы обычно думаем о компиляторах в сотрудничестве с высокоуровневым языком программирования, которые абстрагированы далее из инструкций по ЦП.

Здание полная программа включает запись исходный код для программы или в блоке или в высокоуровневом языке как C++. Исходный код собран (для ассемблерного кода) или скомпилирован (для высокоуровневых языков) к объектному коду, и отдельные модули соединены для становления машинным кодом для заключительной программы. В случае очень простых программ не может быть необходим связывающийся шаг. В других случаях такой как с IDE (интегрированная среда разработки) компоновщик и компилятор могут быть вызваны вместе. В других случаях сложное делает сценарий или , файл решения может использоваться для сообщения среды, как создать заключительное приложение.

существуют также интерпретируемые языки , которые ведут себя по-другому. Интерпретируемые языки полагаются на машинный код специальной программы интерпретатора. На базовом уровне интерпретатор анализирует исходный код и сразу преобразовывает команды в новый машинный код и выполняет их. Современные интерпретаторы, иногда также названные среда выполнения или виртуальная машина , намного более сложны: оценка целых разделов исходного кода за один раз, кэширования и оптимизации, если это возможно, и справления со сложными задачами управления памятью. Интерпретируемый язык может также быть предварительно скомпилирован в промежуточный язык низшего уровня или байт-код, подобный ассемблерному коду.

28
задан Mark 19 March 2010 в 13:35
поделиться

3 ответа

Чрезвычайно распространенной ошибкой является невозможность правильно преобразовать HTTP-ответ из байты в символы. Для этого вам необходимо знать кодировку символов в ответе. Надеюсь, это указано как параметр в параметре Content-Type. Но размещение его в самом теле в качестве атрибута http-Equiv в теге meta также является вариантом.

Таким образом, загрузить страницу в String на удивление сложно. правильно, и даже сторонние библиотеки, такие как HttpClient, не предлагают общего решения.

Вот простая реализация, которая будет обрабатывать наиболее распространенный случай:

URL url = new URL("http://stackoverflow.com/questions/1381617");
URLConnection con = url.openConnection();
Pattern p = Pattern.compile("text/html;\\s+charset=([^\\s]+)\\s*");
Matcher m = p.matcher(con.getContentType());
/* If Content-Type doesn't match this pre-conception, choose default and 
 * hope for the best. */
String charset = m.matches() ? m.group(1) : "ISO-8859-1";
Reader r = new InputStreamReader(con.getInputStream(), charset);
StringBuilder buf = new StringBuilder();
while (true) {
  int ch = r.read();
  if (ch < 0)
    break;
  buf.append((char) ch);
}
String str = buf.toString();
32
ответ дан 28 November 2019 в 03:37
поделиться

Я использую это:

        BufferedReader bufferedReader = new BufferedReader( 
                                     new InputStreamReader( 
                                          new URL(urlToSeach)
                                              .openConnection()
                                              .getInputStream() ));

        StringBuilder sb = new StringBuilder();
        String line = null;
        while( ( line = bufferedReader.readLine() ) != null ) {
             sb.append( line ) ;
             sb.append( "\n");
        }
        .... in finally.... 
        buffer.close();

Он работает в большинстве случаев.

1
ответ дан 28 November 2019 в 03:37
поделиться

Вы все еще можете немного упростить его, используя org.apache.commons.io.IOUtils:

URL url = new URL("http://stackoverflow.com/questions/1381617");
URLConnection con = url.openConnection();
Pattern p = Pattern.compile("text/html;\\s+charset=([^\\s]+)\\s*");
Matcher m = p.matcher(con.getContentType());
/* If Content-Type doesn't match this pre-conception, choose default and 
 * hope for the best. */
String charset = m.matches() ? m.group(1) : "ISO-8859-1";
String str = IOUtils.toString(con.getInputStream(), charset);
4
ответ дан 28 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: