servlet亂碼問題總結


在學習時servlet亂碼問題還是挺嚴重的,總結一下有三種情況 

1.新建HTML頁面后瀏覽出現亂碼

2.以post形式請求時出現亂碼

3.以get形式請求時出現亂碼

讓我們一個一個來解決吧

1.新建HTML頁面后瀏覽出現亂碼

<!DOCTYPE html>
<html>
  <head>
    <title>亂碼示例</title>
    
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">        
    <meta name="Content-Type"content="text/html;charset=utf-8">
  </head>
  
  <body>
    Post示例 <br>
    <form action="/EnocodingDemo/GetEncodingPage" method="post">
        <label>信息:</label><input type="text" name="info"><br/>
        <label>提交:</label>  <input type="submit" value="提交">
    </form>
    
  </body>
</html>

 

我們新建一個網頁后添加一些信息,用瀏覽器打開后發現會有亂碼

遇到這種情況我們發現

代碼里已經把charset設置成了utf-8了

<meta name="Content-Type"content="text/html;charset=utf-8">

但為什么不對呢?答案是它把標記用錯了不應該用name要用http-equiv

把它修改成這樣

<meta http-equiv="Content-Type"content="text/html;charset=utf-8">

重新reload一下,用ie打開

這里要及一下基礎


name 屬性提供了名稱/值對中的名稱。HTML 和 XHTML 標簽都沒有指定任何預先定義的 <meta> 名稱。通常情況下,您可以自由使用對自己和源文檔的讀者來說富有意義的名稱。
"keywords" 是一個經常被用到的名稱。它為文檔定義了一組關鍵字。某些搜索引擎在遇到這些關鍵字時,會用這些關鍵字對文檔進行分類。

http-equiv 屬性為名稱/值對提供了名稱。並指示服務器在發送實際的文檔之前先在要傳送給瀏覽器的 MIME 文檔頭部包含名稱/值對。
當服務器向瀏覽器發送文檔時,會先發送許多名稱/值對。雖然有些服務器會發送許多這種名稱/值對,但是所有服務器都至少要發送一個:content-type:text/html。這將告訴瀏覽器准備接受一個 HTML 文檔。

它倆常用的名稱為

詳細請自己閱讀 http://www.w3school.com.cn/tags/tag_meta.asp

2.以post形式請求時出現亂碼

我們2.以post形式請求時出現亂碼就用上面的HTML頁面新建一個

新建一個servlet   MyEncodingPage

POST請求的數據時作為請求體的一部分傳遞給服務器的,只要修改請求內的編碼就可以。

request.setCharacterEncoding("UTF-8");

詳細代碼

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        request.setCharacterEncoding("UTF-8");
        String info = request.getParameter("info");
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.println("<h1>Hello</h1>");
        out.println("info = "+info);
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

 

3.以get形式請求時出現亂碼

在地址欄輸入默認是gbk,而get傳參數是要先編碼為iso8859-1再傳的,所以要先用iso-8859-1來解碼,再用utf-8編碼為一個新字符串

 

String str= new String(request.getParameter("name").getBytes("ISO-8859-1"), "UTF-8");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM