HTML使用post方式提交中文內容出現亂碼的錯誤解決方式

來源:互聯網
上載者:User

標籤:action   eth   class   value   資料   編碼格式   app   enter   cookie   

 

今天在做一個例子的時候,使用post方式提交表單,如果有中文的話,在另一個頁面顯示出來的時候,總是會出現亂碼;

但是將提交方式改為get的時候,就不會出現這種錯誤。

詳細錯誤見下面圖片和代碼。

HTML代碼:

 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>測試Cookie的設定和擷取</title> 6 </head> 7 <body> 8     <form action="/TestTomcat/SetCookie" method="post"> 9         網站名:<input type="text" name="name"><br>10         網站URL:<input type="text" name="url"><br>11         <input type="submit" value="提交" />12     </form>13 </body>14 </html>

Servlet代碼,截取一部分:

 1 response.setContentType("text/html;charset=utf-8"); 2          3         PrintWriter out=response.getWriter(); 4          5         String title="設定Cookie執行個體"; 6         String docType="<! DOCTYPE html>\n"; 7         out.println(docType+ 8                 "<html>\n"+ 9                 "<head><title>"+title+"</title></head>"+10                 "<body bgcolor=\"#f0f0f0\">\n"+11                 "<h1 align=\"center\">"+title+"</h1>\n"+12                 "<ul>\n" +13                 "  <li><b>網站名:</b>"14                 + request.getParameter("name")  + "\n</li>" +15                 "  <li><b>網站 URL:</b>"16                 + request.getParameter("url") + "\n</li>" +17                 "</ul>\n" +18                 "</body></html>");

出現的錯誤:

一開始我以為時代碼塊放置的位置不對,將上面代碼放在了doPost裡面試了一下,還是出現這種錯誤。

那麼如何用post方式傳遞中文呢?

通過尋找資料,

post方式提交 
對於這種情況,response.setCharacterEncoding有影響,當沒有對response.setCharacterEncoding設定的時候值為null,則預設採用iso-8859-1來進行重新編碼(解碼)。 
瀏覽器根據自己頁面的編碼格式作為起始編碼格式,把字元進行編碼成byte進行傳輸,到了tomcat,tomcat不進行幹涉其中的重新編碼(解碼)格式。如果response.getCharacterEncoding為null,那麼預設採用iso-8859-1進行重新編碼(解碼)成字元,如果設定了,就按照設定的編碼格式進行重新編碼(解碼)字元。

POST傳過去的都是單位元組資料.所以POST傳來的資料編碼都是ISO-8859-1的單位元組資料.因此英文和數字不會有亂碼...在這種情況下.過濾器和server.xml裡的設定都是無效的.當然request.setCharacterEncoding()也是無效的因為setCharacterEncoding的原理跟過濾器一樣;

 

對於上面問題正確的處理方式應該為:

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

將post傳遞過來的ISO編碼內容,改成UTF-8格式的內容,然後再輸出。

 

參考http://blog.csdn.net/sxyandapp/article/details/44623039。

 

HTML使用post方式提交中文內容出現亂碼的錯誤解決方式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.