伺服器響應和瀏覽器請求產生亂碼問題詳述

2021-07-31 20:03:51 字數 2096 閱讀 5555

在解決亂碼問題之前要先了解編碼集的概念

編碼集:

1、作用:讓數字與字元產生對映關係

2、不同的編碼集能對映的字元也不同

3、不同的編碼集中相同的字元可能對應的數字也不一樣

**演示產生亂碼的原因

public class demo1 ;

string str2 = new string(b3, "utf-8");

system.out.println(str2);// 結果是:中

// 用gbk編碼表將位元組轉換成字元

string str3 = new string(b3, "gbk");

system.out.println(str3);// 結果是:涓?

inputstream in=new fileinputstream("test.txt");

byte buffer=new byte[1024];

int length=in.read(buffer);

string str4 = new string(buffer,0,length,"utf-8");

system.out.println(str4);

/*場景2:編碼集不一樣,但是沒有亂碼

比如預設gbk的eclipse向預設utf-8的mysql中寫入中文資料,不會產生亂碼

因為mysql自己做了處理:

eclipse(gbk): "中" ------ [-42,-48]

mysql:1、將位元組按照gbk編碼表轉換成字元new string([-42,-48],"gbk") ----"中"

2、將"中"按照utf-8 解析成位元組[-28, -72, -83];

3、儲存解析後的位元組*/}

總結:由於操作字元時,編碼不統一造成亂碼現象

1、伺服器響應時出現亂碼問題,

eclipse採用的是utf-8的編碼,tomcat伺服器預設的是iso-8859-1編碼,瀏覽器預設的是gbk編碼,如下圖所示:

注意: 以字元為標準傳輸資料時,會產生資料丟失,資料丟失就會編碼失敗,進而亂碼

解決方式protected void doget(httpservletrequest request, httpservletresponse response) 

throws servletexception, ioexception

注意:response呼叫setheader時,預設呼叫了setcharacterencoding方法,所以在程式中,可以省略設定伺服器編

碼集的方法。

2、伺服器請求時出現亂碼問題

//告訴tomcat不要使用預設的iso-8859-1 而是使用utf-8

//post方式解決亂碼

request.setcharacterencoding("utf-8");

string word = request.getparameter("word");

system.out.println("word"); //控制台列印「中」

//get方式解決亂碼

byte bytes = request.getparameter("word").getbytes("iso-8859-1");

string str=new string(bytes,"utf-8");

system.out.println(str); //控制台列印「中」

瀏覽器請求響應瀏覽器和伺服器會做什麼

瀏覽器 伺服器1.首先使用者在瀏覽器輸入url位址 2.瀏覽器會解析這個url位址並且返回這個位址的網域名稱和埠 3.瀏覽器會先檢查瀏覽器的快取檔案中找是否有這個網域名稱,返回ip 如果沒有執行4 4.瀏覽器向dns發起系統呼叫請求 這個時候dns會先在系統的快取檔案和hosts檔案尋找是否有這個網...

再說瀏覽器與伺服器響應流程

當我們在瀏覽器中輸入了乙個url位址 如www.cnblogs.com 從等待到頁面顯示的過程中,後台究竟發生了什麼處理呢?一.解析網域名稱位址為ip位址 瀏覽器dns快取 以chrome為例,在瀏覽器視窗中輸入chrome net internals dns,就可以檢視當前瀏覽器dns快取記錄,c...

瀏覽器請求響應的過程

我們在瀏覽器輸入 之後知道頁面展示,那麼其中的過程是什麼樣子呢 下面我們從http tcp ip講解一下 1.當使用者在瀏覽器輸入之後 dns會解析這個網域名稱,把解析到的ip給客戶端 這裡為什麼要解析網域名稱呢,因為計算器識別不了網域名稱只能識別ip 但是人類的記憶對於數字不是很好,網域名稱是為了...