如何从网站GET请求中获取带有正确文本的字符串,从而避免特殊的HTML代码?

时间:2019-06-06 19:33:44

标签: java character-encoding httpurlconnection

我正在使用GET请求通过HttpConnection对象获取西班牙网站代码。当我通过控制台(网站代码)打印输出时,西班牙语字符不存在。而是有一些“怪异”字符。

假设网站编码为“ UTF-8”(),但我不知道它如何处理西班牙语字符(á,ñ等)

我尝试了很多事情,例如在setRequestProperty方法中定义UTF-8中的charset属性,从char数组构建字符串,使用UTF-8特定编码从字节数组构建字符串,因为我请阅读Java String类默认在UTF-16处构建字符串的地方,否。它仍然给了我所有那些奇怪的角色。

我还尝试使用ISO-8859-1编码进行相同的操作,但结果相同,并且没有任何编码规范。

好吧,我知道这些字符确实遵循一种模式,我可以制作一个类来“翻译”它们,但是我很确定在那个字符之前还有很多更好的选择。

String myMethod() {

    con.setRequestMethod("GET");
    con.setRequestProperty("User-Agent", "Mozilla/5.0");
    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
    con.setUseCaches(false);
    con.setDoInput(true);
    reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));

    return reader.lines().collect(Collectors.joining("\n"));

}

那是发生的事的一个例子。

网站上写的句子(我想得到):

“ estapo deprotecciónotoñode toda laestaciòn”

我实际上从输出中得到的句子:

"Equipo de protección otoño de toda la estaciòn"

1 个答案:

答案 0 :(得分:1)

我使用了来自Apache Commons(https://mvnrepository.com/artifact/commons-lang/commons-lang/2.6)的StringEscapeUtils。

String dirty = "Equipo de protección otoño de toda la estaciòn";
String clean = StringEscapeUtils.unescapeHtml(dirty);

输出:保护技术设备

希望这会有所帮助。祝好运。如果您有任何后续疑问,请发表评论。