2015-12-17 3 views
1

Я получаю ответ со страницы Википедии и вставляю ответ в html-файл. Если я открою html-файл в браузере, я не смогу получить языки, кроме английского, как есть (я использовал UTF-8). Я прикрепляю изображение языков, как в html.Как получить текст, отличный от английского, как ответ с помощью java

enter image description here

Я пытался через пару способов получить ответ с помощью Java, и они являются,

Way 1,

URL url = new URL ("https://en.wikipedia.org/wiki/Sachin_Tendulkar"); 
    byte[] encodedBytes = Base64.encodeBase64("root:pass".getBytes()); 
    //System.out.println("Host --------"+url.getHost()); 
    String encoding = new String (encodedBytes); 

    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setRequestMethod("GET"); 
    connection.setRequestProperty("Accept-Charset", "UTF-8"); 
    connection.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); 
    connection.setDoInput (true); 
    connection.setRequestProperty ("Authorization", "Basic " + encoding); 
    connection.connect(); 

    InputStream content = (InputStream)connection.getInputStream(); 
    BufferedReader in = new BufferedReader (new InputStreamReader (content)); 
    String line; 

    while ((line = in.readLine()) != null) { 
     String s = line.toString(); 
      System.out.println(s); 
     } 

Я также попытался следующий код, но это также не показывает шрифты, как в wiki,

  URL url; 
      HttpURLConnection conn; 
      BufferedReader rd; 
      String line; 
      StringBuilder result = new StringBuilder(); 
      try { 
       url = new URL("https://en.wikipedia.org/wiki/Sachin_Tendulkar"); 
       conn = (HttpURLConnection) url.openConnection(); 
       conn.setRequestMethod("GET"); 
       conn.setRequestProperty("Accept-Charset", "UTF-8"); 
       conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); 

       rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); 
       while ((line = rd.readLine()) != null) { 
        byte [] b = line.getBytes("UTF-8"); 
        result.append(line); 
        System.out.println(result.append(line)); 
       } 
       rd.close(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
+0

Windows/Linux/OS X/IDE console? Правильно ли отображаются символы не-ASCII на консоли? –

+1

Когда вы запрашиваете данные в 'UTF-8', вы также должны использовать эту кодировку. 'new InputStreamReader (content)' использует любую кодировку по умолчанию, установленную вашей системой. Вместо этого используйте 'new InputStreamReader (контент,« UTF-8 »). Когда у вас есть 'String', добавьте его как есть в свой' StringBuilder' вместо того, чтобы преобразовать его в 'byte []' array ... – Holger

ответ

2

Кол-во пунктов:

  • Ваш код не отображает, как именно вы сохраняете ответ на HTML-файл. Вы просто перенаправляете стандартный вывод процесса в файл? Убедитесь, что вы используете UTF-8 даже при записи в выходной файл.
  • Почему вы System.out.println весь экземпляр StringBuffer на каждой итерации цикла чтения?
  • Почему вы вызываете line.getBytes() и никогда не используете вывод?

EDIT - основываясь на ваших комментариях, я действительно думаю, что проблема связана с манипуляциями с буфером обмена. Попробуйте приведенный ниже код, который сохраняет ответ напрямую в выходной файл.

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class HtmlDownloader { 

    private static final String USER_AGENT = "Mozilla/5.0"; 
    private static final String ENCODING = "UTF-8"; 

    public boolean download(String urlAddress, String outputFileName) { 
     HttpURLConnection con = null; 
     BufferedInputStream is = null; 
     BufferedOutputStream os = null; 
     try { 
      URL url = new URL(urlAddress); 
      con = (HttpURLConnection) url.openConnection(); 
      con.setRequestMethod("GET"); 
      con.setRequestProperty("User-Agent", USER_AGENT); 
      con.setRequestProperty("Accept-Charset", ENCODING); 
      is = new BufferedInputStream(
        con.getInputStream() 
      ); 
      os = new BufferedOutputStream(
        new FileOutputStream(outputFileName) 
      ); 
      byte[] buffer = new byte[1024]; 
      int len; 
      while ((len = is.read(buffer)) >= 0) { 
       os.write(buffer, 0, len); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } finally { 
      if (is != null) { 
       try { 
        is.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      if (os != null) { 
       try { 
        os.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     return true; 
    } 

    public static void main(String[] args) { 
     HtmlDownloader d = new HtmlDownloader(); 
     if (d.download("https://en.wikipedia.org/wiki/Sachin_Tendulkar", "c:\\wiki.html")) 
      System.out.println("SUCCESS"); 
     else 
      System.out.println("FAIL"); 
    } 
} 
+0

Пока что я просто копирую консоль (это html-ответ) и вставляю ее в редакторе и сохраните его как html. Затем я открываю html-файл в браузере. Вот почему я делаю sysout. –

+0

И для вашего последнего вопроса, я получаю ссылку на этот вопрос, http://stackoverflow.com/questions/15868314/utf-8-response-with-servlet –

+2

Я подозреваю, что проблема с кодировкой может возникнуть из-за манипуляции с буфером обмена или конфигурацию вашего редактора, которую вы используете для сохранения файла. Попробуйте сохранить данные с Java и посмотреть, работает ли она. – MartinCz

Смежные вопросы