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

Servlet 輸出中文數據編碼全攻略:三大方案徹底解決亂碼

     編輯:Java 綜合教學

核心原理:編碼與解碼必須一致

Servlet 向瀏覽器發送中文,本質是:

  1. 獲取字符串
  2. 按指定編碼(如 UTF-8)轉為字節數組
  3. 告知瀏覽器以相同編碼解碼顯示

若使用字符流(Writer),內部仍會轉字節,需顯式設置響應編碼;若用字節流(OutputStream),需手動編碼並設置 Content-Type。

三大防亂碼方案

方案一:字節流手動控制

手動將字符串按 UTF-8 編碼為字節,設置響應頭,直接寫入 OutputStream。

方案二:字符流 + 設置響應編碼

調用 response.setCharacterEncoding("UTF-8") 並 response.setContentType("text/html;charset=UTF-8"),再獲取 Writer 寫入。

方案三:字符流雙重編碼技巧(核心:UTF-8 編碼 → ISO-8859-1 解碼 → ISO-8859-1 編碼 → UTF-8 解碼)

利用 ISO-8859-1 單字節特性,將 UTF-8 字節流「透傳」。

模擬驗證:

關鍵點:起始用 UTF-8 編碼,最終用 UTF-8 解碼,中間的 ISO-8859-1 轉換雖產生亂碼,但字節序列保持不變,最終還原完美。

總結

推薦方案二,代碼簡潔、語義清晰。方案三適合理解編碼本質,或處理特殊歷史系統兼容場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved