我有一些代码可以解析html字符串并将其转换为常规字符串。
输入:
Lorem ipsum dolor坐下来,精神上的精神。 Vivamus a 元素nisl。 Cras interdum velit non ex gravida dapibus。 Donec cursus tempor lacus eget finibus。 Donec euismod enim vitae nibh blandit,
屏幕2上的输出:
Lorem ipsum dolor sit amet,consectetur adipiscing elit = 2E Vivamus a elem = entum nisl = 2E Cras interdum velit non ex gravida dapibus = 2E Donec cursus tempor lacus eget finibus = 2E Donec euismod enim vitae nibh blandit,
然而,在屏幕1上,输出与输入匹配。我的问题是在我的代码中可能导致这个问题,我没有编写整个应用程序,所以有很多代码我必须通过找到这个bug所以我试图缩小可能导致差异的原因在两个输出中。我真的不知道为什么元素变成elem = entum,我猜这是一个换行问题?
编辑:基本上是什么会导致这两个输出不同,我该如何追踪它。
编辑2:这是辅助输入输出
输入
测试期间。然后...现在引用“内部引号”然后前! @#$%^& > *() - _ + = \ | [] {}; :'',。 /? <> `〜
输出
测试周期= 2E然后= E2 = 80 = A6现在报价= E2 = 80 = 9Cinside> q = uotes = E2 = 80 = 9D然后ex! @#$%^& *() - _ + = 3D \ | [] {}; =:> = E2 = 80 = 98 = E2 = 80 = 9C,= 2E /? <>” 〜
除此之外,屏幕1与输入
相同编辑3:因为我猜我的HTML解析导致了一些问题,所以我将包含该代码,因为我知道在哪里找到它。
String bod = body.toString();
String bod2 = cleanTagPerservingLineBreaks(bod);
removeExtendedChars(bod2);
String bod3 = bod2.replace("=2E", "\\.");
return bod3;
}
public String cleanTagPerservingLineBreaks(String html) {
String result = "";
if (html == null)
return html;
Document document = Jsoup.parse(html);
document.outputSettings(new Document.OutputSettings()
.prettyPrint(false));// makes html() preserve linebreaks and
// spacing
document.select("br").append("\\n");
document.select("p").prepend("\\n\\n");
result = document.html().replaceAll("\\\\n", "\n");
result = Jsoup.clean(result, "", Whitelist.none(),
new Document.OutputSettings().prettyPrint(false));
return result;
}
public String removeExtendedChars(String str) {
return str.replaceAll("[^\\x00-\\x7F]", " ");
}