2010-12-29 5 views
0
public class URLReader { 
     public static byte[] read(String from, String to, String string){ 
      try { 
      String text = "http://translate.google.com/translate_a/t?"+ 
         "client=o&text="+URLEncoder.encode(string, "UTF-8")+ 
         "&hl=en&sl="+from+"&tl="+to+""; 

      URL url = new URL(text); 
      BufferedReader in = new BufferedReader(
         new InputStreamReader(url.openStream(), "UTF-8")); 
      String json = in.readLine(); 
      byte[] bytes = json.getBytes("UTF-8"); 
      in.close(); 
      return bytes; 
        //return text.getBytes(); 
      } 
      catch (Exception e) { 
      return null; 
      } 
     } 
     } 

und:Wie URL-Inhalt korrekt mit utf8 Zeichen gelesen?

public class AbcServlet extends HttpServlet { 
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
    resp.setContentType("text/plain;charset=UTF-8"); 
    resp.getWriter().println(new String(URLReader.read("pl", "en", "koń"))); 
} 
} 

Als ich das laufen bekomme ich: {"sentences"[{"trans":"end","orig":"koďż˝","translit":"","src_translit":""}],"src":"pl","server_time":30} so utf funktioniert nicht richtig, aber wenn ich kodierte URL zurück: http://translate.google.com/translate_a/t?client=o&text=ko%C5%84&hl=en&sl=pl&tl=en und fügen Sie ihn an url bar bekomme ich richtig: {"sentences":[{"trans":"horse","orig":"koń","translit":"","src_translit":""}],"dict":[{"pos":"noun","terms":["horse"]}],"src":"pl","server_time":76}

Antwort

2
byte[] bytes = json.getBytes("UTF-8"); 

gibt Ihnen eine UTF-8 Bytes Sequenzen so URLReader.read geben Sie auch UTF-8 Bytes Sequenzen

aber man versucht, mit zu entschlüsseln, ohne den Geber spezifiziert, dh new String(URLReader.read("pl", "en", "koń")) so Ihr System Standard-Kodierung zu dekodieren verwenden Java wird

Versuchen (die nicht UTF-8):

new String(URLReader.read("pl", "en", "koń"), "UTF-8") 

aktualisieren

Hier arbeitet voll Code auf meinem Rechner:

public class URLReader { 

    public static byte[] read(String from, String to, String string) { 
     try { 
      String text = "http://translate.google.com/translate_a/t?" 
        + "client=o&text=" + URLEncoder.encode(string, "UTF-8") 
        + "&hl=en&sl=" + from + "&tl=" + to + ""; 
      URL url = new URL(text); 
      URLConnection conn = url.openConnection(); 
      // Look like faking the request coming from Web browser solve 403 error 
      conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)"); 
      BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); 
      String json = in.readLine(); 
      byte[] bytes = json.getBytes("UTF-8"); 
      in.close(); 
      return bytes; 
      //return text.getBytes(); 
     } catch (Exception e) { 
      System.out.println(e); 
      // becarful with returning null. subsequence call will return NullPointException. 
      return null; 
     } 
    } 
} 

vergessen Sie nicht, Flucht ñ nach \ u0144. Der Java-Compiler kann Unicode-Text nicht korrekt kompilieren, daher ist es sinnvoll, ihn in ASCII zu schreiben.

public class AbcServlet extends HttpServlet { 

    @Override 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
     resp.setContentType("text/plain;charset=UTF-8"); 
     byte[] read = URLReader.read("pl", "en", "ko\u0144"); 
     resp.getOutputStream().write(read) ; 
    } 
} 
+0

hmm gibt nun { "Sätze": [{ "trans": "Ende", "orig": "ko", "translit": "", "src_translit": ""}]“ src ":" pl“, "server_time": 20} – Infinity

+0

Ist das von Ihrem Web-Browser? Verwenden Sie PrinWriter nicht, wenn Sie mit codierten Bytes arbeiten. Der PrintWriter verwendet den JVM-Standard-Encoder, der nicht UTF-8 ist. Versuchen Sie getOutputStream.write ((new String (URLReader.read ("pl", "en", "koń"), "UTF-8") ) .getBytes ("UTF-8")) – gigadot

+0

ja, von Browser. Ich bekomme jetzt ... "orig": "koďż˝" ... – Infinity