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

Java 爬蟲解析 Unicode 轉義 JSON:org.json 庫自動處理 \\uXXXX 還原中文

     編輯:程式設計綜合問答

爬蟲取得的回應內容為 JSON 字串,其中中文已被 Unicode 轉義 (如 \u975e\u5e38\u4e0d\u9519 → 「非常不錯」)。許多開發者誤以為需手寫正則或解碼器還原,**實則標準 JSON 庫 (org.json、Jackson、Gson) 解析時會自動將 \uXXXX 轉為對應字元**,無需額外處理。

原始資料範例


{
  "errno": 0,
  "data": {
    "hasmore": true,
    "comments": [
      {
        "user_name": "Fei52012345",
        "text": "\u975e\u5e38\u4e0d\u9519\u7684\u4e00\u7bc7\u6587\u7ae0\uff0c\u5e72\u8d27\uff0c\u5e72\u8d27\u3002\u628a\u793e\u4ea4\u8fd0\u8425\u8bb2\u7684\u900f\u5f7b\u3002",
        "from": "weibo"
      }
    ]
  }
}

使用 org.json 解析 (最輕量、零依賴)


import org.json.*;

public class JsonUnicodeDemo {
    public static void main(String[] args) {
        String jsonStr = "..."; // 上述 JSON 字串

        JSONObject root = new JSONObject(jsonStr);
        int errno = root.getInt("errno");
        JSONObject data = root.getJSONObject("data");
        boolean hasMore = data.getBoolean("hasmore");
        JSONArray comments = data.getJSONArray("comments");

        for (int i = 0; i < comments.length(); i++) {
            JSONObject comment = comments.getJSONObject(i);
            String user = comment.getString("user_name");
            // 關鍵點:getString() 直接返回已解碼的中文字串!
            String text = comment.getString("text");
            String from = comment.getString("from");

            System.out.println("用戶: " + user);
            System.out.println("內容: " + text); // 輸出: 非常不錯的一篇文章,干貨,干貨。把社交運營講的透徹。
            System.out.println("來源: " + from);
            System.out.println("---");
        }
    }
}

為何自動解碼?

JSON 標準 (RFC 8259) 規定:字串中的 \uXXXX 為 **Unicode 碼點轉義序列**,解析器**必須**在解析階段將其轉為對應 Unicode 字元。org.json.JSONTokener 內部即實現此邏輯,getString() 回傳的 java.lang.String 已為正確 UTF-16 字元序列。

其他主流庫同樣支援

進階:儲存至文字檔案時的編碼陷阱

解析出中文字串後,寫入檔案**必須指定 UTF-8 編碼**,否則 Windows 預設 Big5/GBK 會導致檔案亂碼:


try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(
        new FileOutputStream("comments.txt"), StandardCharsets.UTF_8))) {
    for (JSONObject comment : comments) {
        writer.println(comment.getString("text"));
    }
}
// 檔案內容將正確顯示中文

常見錯誤避坑

  • ❌ 以 String.replace("\\u", "") 手動處理 → 破壞 JSON 結構、無法處理補充平面字元 (Emoji 等)。
  • ❌ 使用 FileWriter (平台預設編碼) → 中文亂碼。**永遠用 OutputStreamWriter(..., StandardCharsets.UTF_8)**。
  • ❌ 將 JSON 視為純文字用正則提取 → 極其脆弱。**務必用 JSON 庫解析**。

總結

JSON 中的 \uXXXX 是標準轉義序列,**任何標準相容的 JSON 庫解析時皆會自動還原為字元**。Java 開發者只需引入 org.json (輕量) 或 Jackson/Gson (企業級),直接呼叫 getString()/readValue() 即可獲得正確中文,寫入檔案時指定 UTF-8 即可。拒絕手寫解碼器,擁抱標準庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
庫Maven 依賴關鍵 API特點
org.jsonorg.json:json:20231013new JSONObject(str)極輕量、JDK 內建風格、適合簡單解析
Jacksoncom.fasterxml.jackson.core:jackson-databindmapper.readTree(str) / mapper.readValue(str, Class)高效能、支援 POJO 綁定、企業級首選
Gsoncom.google.code.gson:gsongson.fromJson(str, Type)API 簡潔、對 Kotlin 友善、Android 常用