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;
}
}
}
и:Как правильно читать URL-адрес с помощью символов utf8?
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ń")));
}
}
Когда я запускаю это я получаю: {"sentences"[{"trans":"end","orig":"koďż˝","translit":"","src_translit":""}],"src":"pl","server_time":30}
так UTF не работает правильно, но если я вернуть кодированный URL: http://translate.google.com/translate_a/t?client=o&text=ko%C5%84&hl=en&sl=pl&tl=en
и вставить в адресной строке я получаю правильно: {"sentences":[{"trans":"horse","orig":"koń","translit":"","src_translit":""}],"dict":[{"pos":"noun","terms":["horse"]}],"src":"pl","server_time":76}
хмм теперь возвращает { "предложения": [{ "транс": "конец", "туринг": "Ко", "транслит": "", "src_translit": ""}],» src ":" pl "," server_time ": 20} – Infinity
Это из вашего веб-браузера? Не используйте PrinWriter, когда вы имеете дело с закодированными байтами. PrintWriter будет использовать кодировщик по умолчанию JVM, который не является UTF-8. Попробуйте getOutputStream.write ((новая строка (URLReader.read («pl», «en», «koń»), «UTF-8») ) .getBytes («UTF-8»)) – gigadot
да, из браузера. теперь я получаю ... "orig": "koďż˝" ... – Infinity