在Java中,常常會使用response來返回JSON數(shù)據(jù),但是有時候會發(fā)現(xiàn)JSON數(shù)據(jù)返回時出現(xiàn)亂碼。出現(xiàn)這種情況的原因常常是由于編碼問題引起的。下面來具體分析一下。
// Java代碼示例 response.setContentType("application/json;charset=UTF-8"); PrintWriter out = response.getWriter(); String jsonStr = "{\"name\":\"張三\",\"age\":20}"; out.write(jsonStr);
在上述代碼中,我們顯式地設(shè)置了contentType的值為UTF-8,但是返回的JSON串中還是出現(xiàn)了亂碼。這是因為在response設(shè)置contentType后,僅僅處理的是response的頭信息,而并沒有處理內(nèi)容信息。我們需要通過設(shè)置response的編碼來解決這個問題。
// Java代碼示例 response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=UTF-8"); PrintWriter out = response.getWriter(); String jsonStr = "{\"name\":\"張三\",\"age\":20}"; out.write(jsonStr);
在上述代碼中,我們添加了response.setCharacterEncoding("UTF-8")語句,設(shè)置了response的編碼為UTF-8,此時可以正確地返回JSON數(shù)據(jù)。
需要注意的是,在使用JSON時,需要保證請求的編碼與響應(yīng)的編碼一致。如果請求的編碼與響應(yīng)的編碼不一致,那么就會出現(xiàn)返回JSON數(shù)據(jù)時出現(xiàn)亂碼的情況。