JSoup触发“java.nio.charset.IllegalCharsetNameException:iso-8859-1”

时间:2013-11-29 13:20:02

标签: java html-parsing try-catch httprequest jsoup

我已经在一个项目工作了将近五个月,直到现在我还没有看到任何失败,例如:“java.nio.charset.IllegalCharsetNameException:iso-8859-1”在JSoup connect尝试期间。我不知道这是否只是巧合,但最奇怪的是当它在try中触发失败时,catch永远不会被执行。我在SO上看到了这个其他主题java.nio.charset.IllegalCharsetNameException: iso-8859-1,但是我无法理解它会如何影响我的代码,因为我没有使用解析器。

代码:

    private void nodesConnection(String nodeRequest, boolean automaticQuery){


        try{
            CONNECTED_NODE = nodeRequest;

                JSOUP_CONNECTION = Jsoup.connect(CONNECTED_NODE)
                    .userAgent("Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0")
                    .cookie("auth", "token")
                    .timeout(5000)
                    .get();

            } catch(IOException e){

                System.out.println("This is on Node Request " + e.getMessage());

            }

}

失败打印:

Exception in thread "Query Thread" java.nio.charset.IllegalCharsetNameException: iso-8859-1"
    at java.nio.charset.Charset.checkName(Unknown Source)
    at java.nio.charset.Charset.lookup2(Unknown Source)
    at java.nio.charset.Charset.lookup(Unknown Source)
    at java.nio.charset.Charset.forName(Unknown Source)
    at org.jsoup.helper.DataUtil.parseByteData(DataUtil.java:87)
    at org.jsoup.helper.HttpConnection$Response.parse(HttpConnection.java:498)
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:154)
    at com.sh.st.request.http.NodeRequests.nodesConnection(NodeRequests.java:60)
    at com.sh.st.request.http.NodeRequests.<init>(NodeRequests.java:42)
    at com.sh.st.request.http.*.listQueryLinks(*.java:254)
    at com.sh.st.request.http.QueryBaseBuilder.<init>(QueryBaseBuilder.java:44)
    at com.sh.st.request.tool.SearchRequest.run(SearchRequest.java:100)
    at java.lang.Thread.run(Unknown Source)

有谁知道什么是避免这种例外的可能解决方案,或者可以解释可能出现的问题?

1 个答案:

答案 0 :(得分:1)

你是什么意思“我没有使用解析器。”? Jsoup是一个解析器。如果您的意思是不使用parse()方法,那么这并不意味着就Charset而言,get()与parse的行为不同。

来自文档

 Document - get() 
            Execute the request as a GET, and parse the result.

试试这个

Connection.Response cr = Jsoup.connect(THE_URL)
                         .userAgent("Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1;                   Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR  2.0.50727) 3gpp-gba UNTRUSTED/1.0")
                         .cookie("auth", "token")
                         .timeout(5000)
                         .execute();

Document d = Jsoup.parse(cr.body(), "ISO-8859-1");