欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java web請求和響應(yīng)中出現(xiàn)中文亂碼問題的解析

 更新時間:2016年10月11日 08:33:44   作者:crazyCodeLove  
這篇文章主要為大家解析了java web請求和響應(yīng)中出現(xiàn)中文亂碼問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下

說明:在計算機中保存的一切文本信息是以一定的編碼表(0,1,0,1)來保存我們所認識的字符(漢字或英文字符),由字符到計算機存儲的二進制過程是編碼,由讀取二進制到文本的過程稱為解碼。而字符編碼有多種不同的編碼表,所以,如果編碼格式和解碼格式不是同一個碼表就會出現(xiàn)亂碼。想要避免出現(xiàn)亂碼,需要使保存和讀取時使用相同的碼表。

在java web編程中經(jīng)常會出現(xiàn)亂碼,現(xiàn)在詳細講解一下如何進行設(shè)置,避免亂碼

1 網(wǎng)頁編碼

  在編寫網(wǎng)頁的時候,需要指定網(wǎng)頁的編碼格式,使用<meta http-equiv="content-type" content="text/html; charset=UTF-8">來指定。此時瀏覽器讀取或者發(fā)送請求的時候會以指定的編碼格式保存或發(fā)送數(shù)據(jù)。在此是以utf-8形式。

  例如代碼片段:

  <form action="/Pro1/bb" method="post">
  用戶名:
  <input type="text" name="username" ><br>
  
  性別:
  男<input type="radio" name="gender" value="男">&nbsp;女<input type="radio" name="gender" value="女"><br>
  
  喜歡的顏色:<br>
  紅<input type="checkbox" name="color" value="紅">&nbsp;&nbsp; 綠<input type="checkbox" name="color" value="綠">&nbsp;&nbsp;
  藍<input type="checkbox" name="color" value="藍"> 
   
  <br>來自的國家 
  <select name="country">
   <option value="中國">中國</option>
   <option value="美國">美國</option>
   <option value="日本">日本</option>
  </select>
  
  <br>
  <input type="submit" value="提交">&nbsp;
  <input type="reset" value="重置">
  
  
 </form>

2 后端讀取請求數(shù)據(jù)

  在java web的servlet中要想獲取請求的數(shù)據(jù),需要將發(fā)送過來的二進制數(shù)據(jù)按照相應(yīng)的碼表進行解碼才可以獲取相應(yīng)的人類可以讀懂字符串。這個例子中是使用post方法,所以在處理post請求中,在獲取有中文的請求參數(shù)前需要先設(shè)置編碼格式,不然會出現(xiàn)亂碼。因為服務(wù)器默認使用iso-8859-1編碼表進行解碼。

  當(dāng)然,如果想要在輸出中輸出中文字符,也需要使用統(tǒng)一的字符編碼,此處是utf-8,代碼如下

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  String username = request.getParameter("username");
  String gender = request.getParameter("gender");
  String[] colors = request.getParameterValues("color");
  String country = request.getParameter("country");
  
  out.println("<!DOCTYPE HTML>");
  out.println("<HTML>");
  out.println(" <HEAD><TITLE>測試servlet</TITLE></HEAD>");
  out.println(" <BODY>");
  out.print("<h1>以下是您的輸入</h1>");
  
  out.print("<p>");
  out.print("您的用戶名:"+username+"<br>");
  out.print("您的性別:"+gender+"<br>");
  out.print("您喜歡的顏色:");
  for(String cr:colors){
   out.print(cr+" ");
  }
  out.print("<br>");
  
  out.print("您的國家:"+country+"<br>");
  
  out.print("</p>");
  
  out.println(" </BODY>");
  out.println("</HTML>");
 }

注意:此處的request.setCharacterEncoding("utf-8");只對請求實體的內(nèi)容有效。post請求參數(shù)是存放在請求實體中,get方法的請求參數(shù)是放在url的后面以問號開始,‘&'連接多個參數(shù)。所以想要獲取get方法的參數(shù),需要使用手動解碼,或者使用filter。

  手動解碼方法,為了簡單起見只對性別進行解碼,實際使用中需要對每一個參數(shù)進行解碼:String gender = new String(req.getParameter("gender").getBytes("iso-8859-1"),"utf-8") ;

到此時就可以完美解決網(wǎng)頁和服務(wù)器端出現(xiàn)漢字亂碼的現(xiàn)象,記住一條,出現(xiàn)亂碼的都是因為編碼和解碼使用不同編碼表的原因,要使用相同的編碼表,即可解決問題。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java線程之用Thread類創(chuàng)建線程的方法

    java線程之用Thread類創(chuàng)建線程的方法

    本篇文章介紹了,Thread類創(chuàng)建線程的方法。需要的朋友參考下
    2013-05-05
  • java判斷域名無法訪問自行訪問下一條

    java判斷域名無法訪問自行訪問下一條

    這篇文章主要為大家介紹了java實現(xiàn)判斷域名無法訪問的時候自行訪問下一條域名示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • springboot如何去除debug日志

    springboot如何去除debug日志

    這篇文章主要介紹了springboot如何去除debug日志的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring Boot如何使用HikariCP連接池詳解

    Spring Boot如何使用HikariCP連接池詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot如何使用HikariCP連接池的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 分布式面試消息隊列解決消息重復(fù)保證消息順序

    分布式面試消息隊列解決消息重復(fù)保證消息順序

    這篇文章主要介紹了分布式面試問題:分布式消息隊列如何解決消息重復(fù)并保證消息順序面試問題解答,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • spring boot下mybatis配置雙數(shù)據(jù)源的實例

    spring boot下mybatis配置雙數(shù)據(jù)源的實例

    這篇文章主要介紹了spring boot下mybatis配置雙數(shù)據(jù)源的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java線程中的用戶態(tài)和內(nèi)核態(tài)解讀

    Java線程中的用戶態(tài)和內(nèi)核態(tài)解讀

    這篇文章主要介紹了Java線程中的用戶態(tài)和內(nèi)核態(tài)解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 一文吃透 Spring 中的 AOP 編程

    一文吃透 Spring 中的 AOP 編程

    這篇文章主要介紹了springboot中的AOP編程,本文介紹的非常詳細,有一定的參考價值,感興趣的小伙伴可以借鑒一下
    2023-04-04
  • BigDecimal的加減乘除計算方法詳解

    BigDecimal的加減乘除計算方法詳解

    小編做題遇到了大數(shù)的精確計算,再次認識了bigdecimal關(guān)于Bigdecimal意外的有許多小知識點和坑,這里特此整理一下為方便以后學(xué)習(xí),希望能幫助到其他的萌新
    2021-08-08
  • springboot參數(shù)傳中文亂碼的解決方案

    springboot參數(shù)傳中文亂碼的解決方案

    這篇文章主要介紹了springboot參數(shù)傳中文亂碼的解決方案,幫助大家更好的理解和學(xué)習(xí)使用springboot,感興趣的朋友可以了解下
    2021-03-03

最新評論