有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何设置Jsoup读取的数据编码?

我尝试在Big5中使用post数据,得到如下结果:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="zh-TW">

java语句如下所示:

Document docs = Jsoup.connect(param)
                     .timeout(30000)
                     .postDataCharset("Big5")
                     .data("syear","104")
                     .data("smonth","6")
                     .data("sday","30")
                     .data("eyear","104")
                     .data("emonth","7")
                     .data("eday","17")
                     .data("SectNO", "不限科別")
                     .data("EmpNO", "不限醫生")
                     .post();

如何设置用于发送数据以获取响应的字符集


共 (1) 个答案

  1. # 1 楼答案

    解释

    从JSOUP1.8.3开始,postDataCharset()设置发布的数据的字符集。当解析数据读取时,此字符集不会被重用

    相反,Jsoup试图以某种方式找到指定字符集的元http等价物。如果找不到,则默认假定字符集为UTF-8。在你的情况下,这个假设是错误的

    解决方法

    为了解决这个问题,不要让Jsoup猜测数据编码。以下是如何做到这一点:

    // Let Jsoup fetch the data
    Response res = Jsoup.connect(param)         //
                     .timeout(30000)            //
                     .postDataCharset("Big5")   //
                     .data("syear", "104")      //
                     .data("smonth", "6")       //
                     .data("sday", "30")        //
                     .data("eyear", "104")      //
                     .data("emonth", "7")       //
                     .data("eday", "17")        //
                     .data("SectNO", "不限科別") //
                     .data("EmpNO", "不限醫生")  //
                     .execute();
    
    // Now, we tell it explicitly which encoding to use
    Document docs = Jsoup.parse(
                     new String(res.bodyAsBytes(), "Big5"), //
                     param //
    );