首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java HttpClient 抓取網頁亂碼問題的正確解決姿勢

     編輯:程式設計綜合問答

錯誤做法

手動 getBytes("GB2312") 再 new String(..., "UTF-8"),極易因編碼檢測失敗導致亂碼。

標準流程

CloseableHttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet(url);
CloseableHttpResponse resp = client.execute(get);
HttpEntity entity = resp.getEntity();
if (entity != null) {
    // 1. 從 Content-Type 獲取 charset,無則用 EntityUtils 猜測
    String charset = ContentType.getOrDefault(entity).getCharset() != null 
        ? ContentType.getOrDefault(entity).getCharset().name() 
        : "UTF-8"; // 默認
    // 2. 一次性獲取字符串 (自動按 charset 解碼)
    String html = EntityUtils.toString(entity, charset);
    System.out.println(html);
}
resp.close();
client.close();

關鍵點

  • 用 EntityUtils.toString(entity, charset) 統一處理編碼。
  • 優先信任響應頭 Content-Type: text/html; charset=gb2312;無則嘗試 HTML meta charset 或通用檢測器 (如 juniversalchardet)。
  • HttpClient 4.5+ 推薦 CloseableHttpClient 管理連接釋放。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved