阻止 Jsoup 将 utf-8 转换为 utf-16

prevent Jsoup from converting utf-8 to utf-16

提问人:DavesPlanet 提问时间:11/2/2023 更新时间:11/2/2023 访问量:26

问:

我希望以下内容以与提供相同的方式返回编码的项目符号:

Jsoup.parse("<div>&#8226;</div>").text()

但取而代之的是,我得到了一个带有子弹的 utf-16 字符串,该子弹显示为一个黑色圆圈。这会导致 Chrome 出现呈现问题,因为页面的其余部分是 utf-8。从我发现的许多其他 SO 问题中,我认为这可能会奏效

Parser.unescapeEntities(Jsoup.parse("<div>&#8226;</div>").text(), true)

但回想起来,我发现情况恰恰相反,它将逃逸的内容变成了未逃逸的内容。

我发现了一些建议,即 html 需要在头部声明 utf-8 编码才能按照我希望的方式解析它,但这个有效的 html 仍然变成了 utf-16

<!DOCTYPE html>
  <html lang='en'><head><title>foo</title><meta charset='UTF-8'></head>
  <body>&#8226;</body>
</html>

特别是,我正在使用 Jsoup 从先前生成的 html 中解析出一个元素并返回原始 html 文本,例如

Jsoup.parse(myHtml).getElementsByClass("myClass").first().toString()

问题:我如何使用 Jsoup 解析出包含 utf-16 字符的 utf-8 表示的 html 片段,并且不将该内容转换为 utf-16?

UTF-8 JSOUP UTF-16

评论

0赞 Giacomo Catenazzi 11/2/2023
你怎么发现它是UTF16?注意:在内部,JavaScript 将字符串解释为 UTF16(但这并不意味着它将 DOM 写为 UTF16。也许你看得太多了,这不是真正的问题,但很难理解你在做什么。
0赞 DavesPlanet 11/2/2023
@GiacomoCatenazzi第一个代码片段中出现的文本显示为项目符号,当我将该项目符号替换为原始十六进制值时,它会在 Chrome 中正确显示,并且我可以看到内部 String “coder” 属性(如此62917183)当任何包含十六进制值的文本被 Jsoup 解析时指示 1 (UTF16) 和 0 (LATIN1) 当它没有被解析时。我已经通过一个可怕的技巧解决了这个问题,即在解析之前删除十六进制并在解析后恢复它,它在 Chrome 中正确显示,现在正在寻找正确的方法来做到这一点

答: 暂无答案