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

标签 java character-encoding httpurlconnection

我使用 GET 请求通过 HttpConnection 对象获取西类牙网站代码。当我通过控制台(网站代码)打印输出时,西类牙语字符不存在。相反,有一些“奇怪”的角色。

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

我尝试了很多东西,比如在 setRequestProperty 方法中以 UTF-8 定义字符集属性,从 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"));

}

这就是所发生情况的一个例子。

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

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

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

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

最佳答案

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

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

输出:Equipo de protección otoño de toda la estaciòn

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

关于java - 如何从网站 GET 请求中获取包含正确文本的字符串,避免特殊的 HTML 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56484015/

相关文章:

java - Android 应用程序上的 POST 和 GET 难题

java - 窗与窗的互动

java - 使用 JSP servlet 和 Bootstrap 进行分页

java - 在 Groovy 控制台中试用 Geb

java - 相当于java中C++基本字符串

json - Powershell curl 双引号

java - 使用 JGit 获取存储库中的最新提交

python - 什么是 "ANSI_X3.4-1968"编码?

java - HttpURLConnection POST,conn.getOutputStream() 抛出异常

java - 在 Java 中获取同一 URL 的不同响应代码