如何使用Java解码html代码?
可能重复:如何使用Java解码html代码?,java,html,regex,decode,Java,Html,Regex,Decode,可能重复: 我需要从html文件中提取段落(如StackOverflow中的title) 我可以使用Java中的正则表达式来提取我需要的字段,但我必须对获得的字段进行解码 示例 提取的字段: Paging Lucene's search results (with **;** among **'** and **s**) 解码后的字段: Paging Lucene's search results java中是否有允许我转换这些html代码的类?使用 不要试图用
我需要从
html
文件中提取段落(如StackOverflow中的title
)
我可以使用Java中的正则表达式来提取我需要的字段,但我必须对获得的字段进行解码
示例
提取的字段:
Paging Lucene's search results (with **;** among **'** and **s**)
解码后的字段:
Paging Lucene's search results
java中是否有允许我转换这些html代码的类?使用
不要试图用regexp解决所有问题 虽然您可以做一些事情,例如替换实体,但更好的方法是实际使用(健壮的)HTML解析器 见这个问题: 对于为什么这是一个坏主意做瑞士陆军电锯认真地说,阅读这个问题和最上面的答案,这是一个堆栈溢出的亮点强> Chuck Norris可以用正则表达式解析HTML 坏消息是:编码字符的方法不止一种 例如,字符“λ”可以表示为
λ代码>,和#x03BB代码>或和#X03bb代码>
如果你真的不走运,一些网站会依赖浏览器的功能来猜测字符的含义<代码>例如,code>无效,但许多浏览器会将其解释为™代码>
显然,最好将其留给专门的库,而不是自己尝试破解自定义正则表达式。
因此,我强烈建议:
- 将字符串馈送到健壮的HTML解析器中
- 返回已解析(并完全解码)的字符串
您的HTML是否包含标记?是的,但提取的字段不包含用于初学者的标记,这首先是完全错误的。只需使用一个类似的Jsoup。一个稍微好一点的就可以立即为您卸载HTML了。我需要从具有相同结构和标记的HTML中提取(比如wikipedia)。所以我认为正则表达式是一个很好的方法。@Carasus先生:不,不是。使用HTML解析器和DOM进行提取。这就是他们的目的!顺便说一句,尝试使用DBPedia。它已经是维基百科的解析版本。你知道StackOverflow的解析版本吗?我尝试将正则表达式与stackoverflow htmls结合使用,效果很好。我用一组应用于htlm的正则表达式提取标题和答案。@MikeSamuel页面在第3条中写道:“不……在U+0080–U+009F范围内”。0x0099在此范围内。-最新链接
import org.apache.commons.lang.StringEscapeUtils;
// ...
String afterDecoding = StringEscapeUtils.unescapeHtml(beforeDecoding);