一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

GET請(qǐng)求的中文亂碼問題及處理意義

 青_春 2015-11-26

首先看一段亂碼的程序:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  //0設(shè)置編碼

  request.setCharacterEncoding("UTF-8");

  String username=request.getParameter("username");

  String password=request.getParameter("userPwd");

  System.out.println("處理之前:"+username+":"+password);

    //此時(shí)輸出的結(jié)果:處理之前:è????????:aa1234bb---也就是說(shuō)中文字符本身的編碼還是不對(duì)。

  //做如下處理:

  username = new String(username.getBytes("ISO8859-1"),"UTF-8");

  System.out.println("處理之后:"+username+":"+password);

  response.setContentType("text/html;charset=UTF-8");

  ServletOutputStream out=response.getOutputStream();

  out.println(username);

  out.println(password);

 }

亂碼原因的分析:

get請(qǐng)求的原理圖:

1.數(shù)據(jù)解析編碼:指的是html頁(yè)面form表當(dāng)數(shù)據(jù)提交時(shí)候的編碼方式,這個(gè)編碼方式和頁(yè)面編碼是統(tǒng)一的,這里設(shè)置為UTF-8

2.GET請(qǐng)求的的請(qǐng)求數(shù)據(jù),并不在請(qǐng)求體體中,而是在請(qǐng)求行中的?之后。而整個(gè)請(qǐng)求數(shù)據(jù),包括請(qǐng)求行,請(qǐng)求頭,請(qǐng)求體都會(huì)通過(guò)http協(xié)議發(fā)送到服務(wù)端去處理。(HTTP協(xié)議時(shí)不支持中文的,默認(rèn)編碼:ISO8859-1)

對(duì)比post請(qǐng)求,post請(qǐng)求的的請(qǐng)求數(shù)據(jù)都包含在請(qǐng)求體中,當(dāng)發(fā)送了了服務(wù)端的時(shí)候,通過(guò)設(shè)置request.setCharacterEncoding("UTF-8"),就能夠使得數(shù)據(jù)傳輸?shù)椒?wù)端的時(shí)候,能夠?qū)⑵浣馕龀蓇tf-8的數(shù)據(jù)。

但是,這樣的設(shè)置編碼的操作對(duì)請(qǐng)求行中的數(shù)據(jù)缺失無(wú)效的。

3.前面說(shuō)了數(shù)據(jù)時(shí)通過(guò)http協(xié)議的方式發(fā)送到服務(wù)端,而請(qǐng)求行的信息(原始狀態(tài)下是UTF-8編碼)經(jīng)過(guò)http協(xié)議進(jìn)行傳輸?shù)臅r(shí)候,http協(xié)議對(duì)其進(jìn)行了默認(rèn)編碼的編碼操作。并發(fā)送到了服務(wù)端,而服務(wù)端類似post請(qǐng)求的處理方式,對(duì)其有沒有作用。

那么,服務(wù)段應(yīng)該如何對(duì)這樣的亂碼,就行解碼,讓其還原成UTF-8編碼呢。實(shí)際上就是還原成原始數(shù)據(jù)的編碼?

(亂碼產(chǎn)生的核心本質(zhì):源編碼和讀取顯示的編碼不一致)

思路:找到源編碼的二進(jìn)制,然后重新用UTF-8進(jìn)行解碼就可以了。

4.解決辦法:

服務(wù)端:String username=request.getParamter("username");----這是獲得的ISO8859-1編碼的亂碼數(shù)據(jù)

解碼:

username.getBytes("ISO8859-1");-----這樣就獲得了原始數(shù)據(jù)。

而原始數(shù)據(jù)就是按照UTF-8編碼的,那么此時(shí),只需要將其變成UTF-8的字符串?dāng)?shù)據(jù)就ok

new String(username.getBytes("ISO8859-1,"UTF-8""));

最終表現(xiàn)在上面的程序中,值處理之前,是亂碼的,通過(guò)解碼在還原的操作,中文則不再亂碼。

仍然存在的疑惑:

1. response.setContentType("text/html;charset=UTF-8");

如果沒有手動(dòng)解碼的代碼username.getBytes("ISO8859-1"); 通過(guò)上述方式設(shè)置response編碼,將其發(fā)送到瀏覽器,沒有出現(xiàn)亂碼。

這種情形是合理的嗎?是不是上述操作的底層也是用過(guò)來(lái)類似 username.getBytes("ISO8859-1") 這樣的解碼方式?(可以這么理解)


2.如果是post請(qǐng)求的時(shí)候,請(qǐng)求內(nèi)容在請(qǐng)求體中,不也要通過(guò)http協(xié)議對(duì)其進(jìn)行編碼嗎?為什么數(shù)據(jù)發(fā)送到服務(wù)端,就直接可以通過(guò)

request.setCharcterEncoding(UTF-8)對(duì)數(shù)據(jù)進(jìn)行解碼?(視頻里面提到流的處理方式)

這里面,request.setCharacterEncoding(UTF-8)值能請(qǐng)求體中的流進(jìn)行處理。


那么這個(gè)還有一個(gè)問題就是,

  response.setContentType("text/html;charset=UTF-8");

  ServletOutputStream out=response.getOutputStream();

  out.println(username);

  out.println(password);

做了這樣的操作以后,即使沒有手動(dòng)解碼,在服務(wù)端通過(guò)上述流操作,將數(shù)據(jù)輸出到瀏覽器中,沒有出現(xiàn)亂碼。


那么對(duì)于get請(qǐng)求,手動(dòng)解碼的意義是什么呢。后來(lái)明白了,因?yàn)榇蠖鄶?shù)情況下,還是要將數(shù)據(jù)信息存儲(chǔ)到數(shù)據(jù)庫(kù)中個(gè),

存儲(chǔ)到數(shù)據(jù)庫(kù)的操作,可不是流的操作, 那么這個(gè)時(shí)候,如果這屆存儲(chǔ)到數(shù)據(jù)庫(kù)的情況下,就會(huì)亂碼的。所以通過(guò)手動(dòng)解碼的方式的意義還是大大的。


當(dāng)然,一般不用字節(jié)流來(lái)處理文本數(shù)據(jù),上述代碼,改成response.getWriter的方式處理就ok。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    91精品蜜臀一区二区三区| 中文字幕五月婷婷免费| 午夜视频在线观看日韩| 欧美在线观看视频免费不卡| 国产高清一区二区不卡| 少妇熟女精品一区二区三区| 亚洲熟女国产熟女二区三区| 亚洲高清中文字幕一区二区三区| 精品久久av一二三区| 久久福利视频这里有精品| 国产亚洲不卡一区二区| 韩国日本欧美国产三级| 欧美黑人暴力猛交精品| 九九热这里有精品20| 色婷婷中文字幕在线视频| 久久综合亚洲精品蜜桃| 日本黄色高清视频久久| 欧美精品在线观看国产| 99久久精品一区二区国产| 中文字幕人妻日本一区二区| 国产欧洲亚洲日产一区二区| 中文字幕高清免费日韩视频| 国产精品一区二区视频成人| 在线观看免费午夜福利| 久久国产青偷人人妻潘金莲| 五月综合激情婷婷丁香| 超薄丝袜足一区二区三区| 国产亚洲欧美一区二区| 日本一二三区不卡免费| 国产精品欧美一区二区三区不卡| 富婆又大又白又丰满又紧又硬 | 激情五月天免费在线观看| 国产高清精品福利私拍| 欧美整片精品日韩综合| 久久精品伊人一区二区| 中文字幕日韩精品人一妻| 亚洲一区二区久久观看| 国产精品一级香蕉一区| 国产欧美日韩在线一区二区| 欧洲精品一区二区三区四区| 国产精品日韩精品最新|