Servlet 向瀏覽器發送中文,本質是:
若使用字符流(Writer),內部仍會轉字節,需顯式設置響應編碼;若用字節流(OutputStream),需手動編碼並設置 Content-Type。
手動將字符串按 UTF-8 編碼為字節,設置響應頭,直接寫入 OutputStream。
調用 response.setCharacterEncoding("UTF-8") 並 response.setContentType("text/html;charset=UTF-8"),再獲取 Writer 寫入。
利用 ISO-8859-1 單字節特性,將 UTF-8 字節流「透傳」。
模擬驗證:
關鍵點:起始用 UTF-8 編碼,最終用 UTF-8 解碼,中間的 ISO-8859-1 轉換雖產生亂碼,但字節序列保持不變,最終還原完美。
推薦方案二,代碼簡潔、語義清晰。方案三適合理解編碼本質,或處理特殊歷史系統兼容場景。