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

Tomcat 訪問 JSON 文件中文亂碼:文件編碼與 URIEncoding 雙重保障

     編輯:程式設計疑難解答

現象

  • Chrome 安裝 JSON Handle 插件訪問 https://localhost:8080/data.json。
  • 中文顯示亂碼( 或亂碼字符)。
  • 已在 server.xml 配置 URIEncoding="UTF-8" 並重啟 Tomcat,無效。

根因:JSON 文件本身編碼不是 UTF-8

URIEncoding 只影響 請求參數解碼(GET 參數、POST 表單),不影響靜態文件內容編碼。瀏覽器直接請求靜態 .json 文件時,Tomcat 以文件字節流原樣輸出,響應頭 Content-Type: application/json;charset=ISO-8859-1(默認),導致瀏覽器按錯誤編碼渲染。

解決方案(按推薦順序)

✅ 方案一:保存 JSON 文件為 UTF-8 無 BOM(最根本)

  • Notepad++:編碼 → 轉為 UTF-8 編碼(不要選「UTF-8-BOM」)。
  • VS Code:右下角編碼點擊 → Save with Encoding → UTF-8。
  • IDE 保存時自動轉碼。

✅ 方案二:強制 Tomcat 為 .json 添加 UTF-8 Charset 响應頭

在 web.xml (Tomcat 全局或項目) 添加:

<mime-mapping>
    <extension>json</extension>
    <mime-type>application/json;charset=UTF-8</mime-type>
</mime-mapping>

重啟 Tomcat,響應頭變為 Content-Type: application/json;charset=UTF-8,瀏覽器自動正確解碼。

⚠️ 方案三:Spring MVC Controller 讀取文件並指定編碼返回(靈活但重)

@GetMapping("/data.json")
public ResponseEntity getJson() throws IOException {
    String content = new String(Files.readAllBytes(Paths.get("data.json")), StandardCharsets.UTF_8);
    return ResponseEntity.ok()
        .contentType(MediaType.parseMediaType("application/json;charset=UTF-8"))
        .body(content);
}

驗證步驟

  1. curl -I https://localhost:8080/data.json 確認 Content-Type 含 charset=UTF-8。
  2. 瀏覽器 F12 Network → Response Headers 確認。
  3. JSON Handle 插件重新加載,中文正常顯示。

總結

文件編碼 ≠ 傳輸編碼。請確保「文件存盤為 UTF-8」+「響應頭聲明 UTF-8」雙重保障。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved