Java 是一種非常流行的編程語言,它經(jīng)常用來處理各種數(shù)據(jù)格式,包括 JSON。然而,如果在處理 JSON 數(shù)據(jù)時出現(xiàn)了漢字亂碼的情況,可能會讓你感到非常困惑。本文將介紹 Java 中 JSON 出現(xiàn)漢字亂碼的原因以及解決方法。
JSON 是一種輕量級的數(shù)據(jù)交換格式,常用于前后端數(shù)據(jù)傳輸。在使用 Java 處理 JSON 數(shù)據(jù)時,我們通常會使用一些第三方庫,比如 Jackson、GSON、FastJSON 等。這些庫都提供了將 JSON 字符串轉(zhuǎn)換成 Java 對象、將 Java 對象轉(zhuǎn)換成 JSON 字符串的方法。但是,在處理 JSON 數(shù)據(jù)中出現(xiàn)漢字亂碼的情況比較常見。
造成漢字亂碼的原因通常是字符編碼不一致。在 Java 中,默認(rèn)使用的字符集是 UTF-8,而在 JSON 中,默認(rèn)使用的字符集是 Unicode。當(dāng)我們將 JSON 字符串轉(zhuǎn)換成 Java 對象時,如果 JSON 字符串中的漢字采用了非 UTF-8 編碼,就會出現(xiàn)亂碼。同樣,當(dāng)我們將 Java 對象轉(zhuǎn)換成 JSON 字符串時,如果 Java 對象中的漢字采用了非 Unicode 編碼,也會出現(xiàn)亂碼。
// JSON 字符串中使用 GBK 編碼的漢字 String jsonStr = "{\"name\": \"張三\", \"age\": 20}"; // 將 JSON 字符串轉(zhuǎn)換成 Java 對象 Person person = JSON.parseObject(jsonStr, Person.class); System.out.println(person.getName()); // 輸出亂碼
我們可以通過指定字符集的方式來解決這個問題。比如,在使用 Jackson 處理 JSON 數(shù)據(jù)時,我們可以在 ObjectMapper 中指定字符集,如下所示:
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setEncoding(JsonEncoding.UTF8); String jsonStr = objectMapper.writeValueAsString(person);
這樣,無論是將 JSON 字符串轉(zhuǎn)換成 Java 對象,還是將 Java 對象轉(zhuǎn)換成 JSON 字符串,都會自動使用 UTF-8 編碼,就不會出現(xiàn)亂碼了。