javaWeb中的亂碼問題

2021-08-27 13:49:49 字數 2284 閱讀 1345

亂碼:  中文引起的亂碼[gbk: 2位元組乙個字元    utf-8: 3位元組乙個字元    iso8859-1: 1位元組乙個字元]

原因:  編碼解碼格式不統一

瀏覽器編碼解碼格式:  -

如果交給瀏覽器的響應報文設定了響應編碼的響應頭,瀏覽器優先使用 -

如果響應頭中沒有編碼,瀏覽器則去頁面中查詢charset

="utf-8">使用 -

如果報文和頁面都沒有設定編碼,瀏覽器使用系統預設的編碼gbk

伺服器編碼解碼格式: -

iso8859-1

情況

1、請求亂碼:瀏覽器封裝資料(編碼)傳送給伺服器解析(解碼)出現亂碼

瀏覽器編碼格式:utf-8

伺服器解碼格式:iso8859-1

解決:無論什麼情況都可以解決:方案1:  使用iso8859

-1解析utf

-8出現了亂碼    原理,不用

字串重構

將iso8859

-1亂碼字串通過iso8859

-1還原為位元組陣列

使用utf

-8重構

byte

bs = username.getbytes("iso8859

-1");

username

= new string(

bs, "utf

-8");

get請求亂碼:

方案2: get請求時,請求引數在請求首行的

url位址後攜帶[get請求只能用來攜帶請求引數]

設定request物件解析請求首行資料的編碼即可 在

tomcat

配置檔案:server.xml中  8080埠號所在的標籤新增uriencoding="utf

-8"屬性 -

解決了當前工作空間所有請求的中文亂碼問題

post請求亂碼:

方案3: post請求時, 請求引數在請求體中攜帶,設定伺服器解析請求體引數的編碼[post請求可以上傳檔案或上傳請求引數] -

沒有統一解決的方案,每個

servlet

根據自己接受的資料型別單獨處理 -

在使用request物件之前設定解碼格式:request.setcharacterencoding("utf

-8");

2、響應亂碼:伺服器封裝資料(編碼)響應給瀏覽器解析(解碼)出現亂碼

servlet

檔案中編寫中文字串是utf

-8的編碼

response物件是伺服器封裝使用的,編碼格式是iso8859

-1,使用iso8859

-1將utf

-8的資料寫入到響應體中[已經出現亂碼]

瀏覽器得到響應報文,沒有在響應頭中獲取到編碼格式,也沒有在頁面中獲取編碼格式,就使用系統預設的gbk解析iso8859

-1的頁面[又亂碼了]

解決:方案1: 不用

1.1 設定response物件的編碼格式為utf

-8 :在使用response物件之前

response.setcharacterencoding("utf

-8");

1.2 設定瀏覽器的解碼格式為utf-8

方案2:  常用

response.setheader("content

-type", "text/

html

;charset

=utf

-8");//相當於設定了response物件的編碼和告訴瀏覽器如何解析響應體內容

response.setcontenttype("text/

html

;charset

=utf

-8");

java web 中亂碼問題

string name new string request.getparameter username getbytes iso 8859 1 gbk 這樣的接受引數的方法是乙個通用的方法,不管是對get或post提交的方法都有效 一 中文亂碼產生的原因 a 亂碼有很多種,這裡所說的是指web傳入...

JAVA WEB開發中處理亂碼彙總

在開發中難免會遇到中文顯示亂碼的問題,亂碼問題是乙個很棘手的問題,常常令程式設計師抓狂。現在把我使用的幾種解決亂碼的方案和大家共享!一 表單提交的亂碼處理 表單提交分為get和post兩種提交方式。兩種方式的亂碼解決又不一樣,用post提交只需要在接受的時候加上request.setcharacte...

JavaWeb中的路徑問題

要知道我們在ide中新建的專案,當發布到伺服器上時,src中內容是不會發布的,發布的是src中編譯好的class檔案,且class檔案放在webcontent下的web inf中的乙個檔案,當我們去訪問發布的 時路徑會發生變化!絕對路徑由伺服器解析,到專案名 要區分相對路徑和絕對路徑。更要區分哪個是...