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

解決 Servlet 中 PrintWriter 輸出中文亂碼:指定 OutputStreamWriter 編碼為 GBK

     編輯:程式設計疑難解答

問題現象

Eclipse 項目編碼 UTF-8,瀏覽器編碼 GBK,PrintWriter 直接輸出中文顯示亂碼。

原因分析

response.getWriter() 返回的 PrintWriter 使用 response.getCharacterEncoding()(默認 ISO-8859-1)編碼。若未設置 response.setCharacterEncoding("GBK"),則按 ISO-8859-1 寫入字節流,瀏覽器按 GBK 解碼導致亂碼。

解決方案 1:設置響應編碼(推薦)

response.setCharacterEncoding("GBK"); // 必須在 getWriter() 之前
response.setContentType("text/html;charset=GBK");
PrintWriter out = response.getWriter();
out.write("中文內容");

解決方案 2:強制指定 OutputStreamWriter 編碼

PrintWriter out = new PrintWriter(
    new OutputStreamWriter(response.getOutputStream(), "GBK"), true);
out.write("中文內容");
  • 繞過 response.getWriter() 的默認編碼邏輯。
  • 適用於無法設置響應編碼的特殊場景(如過濾器鏈已提交響應)。

最佳實踐

  1. 統一項目編碼為 UTF-8(頁面、數據庫、Java 文件、Tomcat URIEncoding)。
  2. 瀏覽器端聲明 <meta charset="UTF-8">。
  3. 避免混用 GBK/UTF-8,除非對接老系統強制要求。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved