我正在使用 HtmlUnit 在 HTML 文件中执行一些 Javascript。重点是 Javascript 可以是任何东西,例如 document.querySelector()
。
当通过 executeJavaScript()
运行 document.querySelector()
以从 HTML 获取字符串数据时,它会弄乱编码。
例如:Interés
变为 Interés
。
是否有一种聪明的方法来配置 HtmlUnit 对象来转换它?
一些代码:
webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setAppletEnabled(false);
webClient.getOptions().setDownloadImages(false);
htmlPage = this.webClient.getPage("file:/" + htmlFile.getAbsolutePath());
ScriptResult scriptResult = htmlPage.executeJavaScript(someJavascriptFunction);
//This scriptResult.getJavaScriptResult() already has encoding issues
我尝试设置 webClient.addRequestHeader("Accept-Encoding", "utf-8");
但它不起作用。
最佳答案
这里的问题是文件源。有有关从磁盘读取纯文件时所使用的编码的信息。 HtmlUnit 处理这种情况的方式与 Web 服务器不提供任何编码信息作为响应的一部分一样。在这些情况下,HtmlUnit(像真正的浏览器一样)使用 StandardCharsets.ISO_8859_1 编码读取文件字节。
作为简单的解决方案,编写 ISO_8859_1 编码的文件。
关于javascript - HtmlUnit 获取编码错误的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53765583/