關於Servlet的PrintWriter 中文亂碼問題

   ps:servlet的PrintWriter和ServletOutputStream是不能同時使用的,同時使用會拋異常;html

       PrintWriter是字符流.ServletOutputStream是字節流.字節流是萬金油,因此這裏說的是當使用字符流PrintWriter的時候;ios

       以下代碼:windows

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String data = "中國";
        response.getWriter().write(data);
}

向瀏覽器輸出中國兩字;很愉快的發佈以後,瀏覽器返回的是??.瀏覽器

是由於:服務器

1; 當服務器去調用servlet的時候同時建立了一個resquest和一個response對象.resquest用來存儲客戶端發送請求,response用來存儲服務器返回的數據;編碼

2: 當Servlet拿着data去查它的默認碼錶,Sun公司顯然是查國外的碼錶:ISO8859-1之類的...查完碼錶將它存儲在response裏,而後輸出在瀏覽器裏,瀏覽器的編碼在中文的windows下通常是gbk或者gb2312.瀏覽器拿到ios編碼的字符再查gbk的碼錶,顯然就是亂碼了.spa

解決:既然是Servlet裏出的問題,那麼就修改它的編碼方式:code

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String data = "中國";
        response.setCharacterEncoding("UTF-8");//通常咱們將字符編碼設置成UTF-8.國際標準.
        response.getWriter().write(data);
            
}

這個時候部署上去看見三個字:涓浗,是由於咱們的瀏覽器的編碼是GBK(默認),因此咱們要告知瀏覽器的編碼方式(固然你也能夠本身在瀏覽器裏設置,不推薦:讓用戶本身去操做的都是不良好的用戶體驗;htm

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setHeader("Content-type", "text/html;charset=UTF-8");//告知瀏覽器編碼方式;
        String data = "中國";
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(data);
            
    }

 這樣咱們就能看見"中國"啦~對象

相關文章
相關標籤/搜索