欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Web開發(fā)亂碼問題原理分析-創(chuàng)新互聯(lián)

Java web開發(fā)過程經(jīng)常遇到亂碼,本篇我們探討一下亂碼產(chǎn)生的原因與解決思路。

成都創(chuàng)新互聯(lián)致力于網(wǎng)站建設(shè)、成都網(wǎng)站制作,成都網(wǎng)站設(shè)計(jì),集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇成都創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!

一次完整的Web請(qǐng)求會(huì)有4次編解碼轉(zhuǎn)換,如下所示。

第一次:客戶端(通常為瀏覽器)將字符轉(zhuǎn)換成TCP字節(jié)流發(fā)向服務(wù)器。

這里有一次字符到字節(jié)的轉(zhuǎn)換。

第二次:服務(wù)器讀取客戶端發(fā)來的TCP字節(jié)流,轉(zhuǎn)換成字符串。

這里是一次字節(jié)到字符的轉(zhuǎn)換。

第三次:服務(wù)器將結(jié)果字符串換成TCP字節(jié)流發(fā)向客戶端。

這里又有一次字符到字節(jié)的轉(zhuǎn)換。

第四次:客戶端讀取服務(wù)端發(fā)過來的響應(yīng)字節(jié)流。轉(zhuǎn)換成字符串顯示。

Web開發(fā)亂碼問題原理分析

一個(gè)完整的Web請(qǐng)求就結(jié)束了。

聰明的你已經(jīng)發(fā)現(xiàn)了,第一次轉(zhuǎn)換和第二次轉(zhuǎn)換是一對(duì)對(duì)應(yīng)的編解碼。第三次和第四次轉(zhuǎn)換是一對(duì)對(duì)應(yīng)的編解碼。也就是第一次會(huì)哪種字符集編碼,第二次就要用相同的字符集解碼。

第三次可以選擇與前兩次不同的字符集,但第四次必須第三次相同。不錯(cuò),你已經(jīng)入門了。

我們?cè)趺凑业降谝淮蔚木幋a的字符。Web客戶端程序的作者定然知道他用什么字符發(fā)送Web請(qǐng)求,我們就不多說了。我們這里只說瀏覽器,因?yàn)榻^大數(shù)請(qǐng)求是瀏覽器發(fā)出來的。

瀏覽器在提交post或get表單時(shí),采用是瀏覽器當(dāng)前頁面的編碼。

查看chrome瀏覽器、360極速瀏覽器等當(dāng)前頁面編碼:點(diǎn)擊瀏覽器右側(cè)菜單圖標(biāo),然后依次將鼠標(biāo)移到“工具”→“編碼”即可查看或更改當(dāng)前頁面的編碼模式。

而當(dāng)前頁的編碼是當(dāng)瀏覽器獲取該頁面時(shí),第四次轉(zhuǎn)換決定的。瀏覽器是根據(jù)響應(yīng)頭和響應(yīng)正文決定采用哪種編碼。

發(fā)現(xiàn)沒有,上面我們說到第一次轉(zhuǎn)換決定了第二次轉(zhuǎn)換的編碼,第三次決定了第四次轉(zhuǎn)換的編碼。而這里第四次又決定第一次轉(zhuǎn)換的編碼。一個(gè)環(huán)形轉(zhuǎn)換形成了。

A1=A2, A3=A4, A4=A1所以A1=A2=A3=A4. 證明選擇相同的字符是完成正確編碼的轉(zhuǎn)換的充分條件。

說完了第一次編碼,我們講一下第二次解碼。

客戶端發(fā)過的請(qǐng)求報(bào)文,分三部分: 請(qǐng)求行,請(qǐng)求頭,POST正文。存在亂碼可能的位置有兩個(gè)地方,請(qǐng)求URL的參數(shù)部分和POST正文。(英文字符為什么沒亂碼? 因?yàn)椴捎肁SCII碼,絕大部分字符集對(duì)英文的編碼都一樣的)。

服務(wù)器在解析這兩部分時(shí),分別有自已的字符集。拿Tomcat來說,urlEncoding參數(shù)指定解析URL參數(shù)部分的編碼。而request.getCharsetEncoding()指定的是解析POST正文的字符集。

說完第二次解碼,說一下第三次的編碼。

服務(wù)端將字符發(fā)向客戶端,必須轉(zhuǎn)換成字節(jié)流。用什么編碼好呢? JSP頁面有兩個(gè)設(shè)置選項(xiàng):pageEncoding和contentType。你注意到了嗎?

一般情況他們都會(huì)同時(shí)出現(xiàn)。pageEncoding表示是JSP文件的編碼,而contentType是服務(wù)端將字符發(fā)向客戶端的字符集編碼。這個(gè)字符集會(huì)寫在響應(yīng)報(bào)文頭的Content-Type字段中的。Content-Type:"text/javascript;charset=gbk"。只有contentType存在,好理解。pageEncoding的出現(xiàn),與contentType有了點(diǎn)情感糾葛。記得是一點(diǎn)。大家知道JSP文件需要編譯成Java文件.

這個(gè)過程:1. 讀取JSP文件,2. 轉(zhuǎn)換Java類字符串,3.寫入JAVA文件。文件都是字節(jié)流。讀取JSP文件就是采用pageEncoding字符集來解碼。寫入JAVA的編碼一律為UTF-8(因?yàn)镴AVAC用UTF-8去編譯java到class).

這一點(diǎn)情感糾葛就在,contentType不存在時(shí)候,pageEncoding字符集會(huì)代替他。

下面第四次是在瀏覽器顯示最終結(jié)果的時(shí)候。

瀏覽器采用響應(yīng)頭中的Content-Type字段來解析響應(yīng)報(bào)頭,并顯示。

如果Content-Type不存在,則瀏覽器會(huì)采用:
<meta http-equiv=Content-Type content="text/html;charset=gb2312">

指定的字符集來解碼。

完了,聽上去好像很簡哦,但為什么會(huì)出現(xiàn)那么多亂碼的情況?常見情況:

  1. AJAX請(qǐng)求。

AJAX請(qǐng)求的編碼是程序設(shè)定的。不在A1到A4這環(huán)形家庭中。程序

員沒能理解各個(gè)編碼參數(shù)作用點(diǎn),所以出錯(cuò),由上面4步的分析。如果還不能理解,我只能呵呵。

  1. urlEncoding各平不一樣。

Post正文是由request.getCharsetEncoding()字符集解析,這個(gè)字符集是程序控制的。URL的請(qǐng)求參數(shù)是由urlEncoding字符集解析的。而urlEncoding一般由服務(wù)器設(shè)定不一樣,比如Tomcat默認(rèn)為iso8859-1。遷移過程中注意這個(gè)。

  1. JSP文件保存格式不對(duì)。

JSP中pageEncoding指定為GBK,JSP文件卻保存成UTF-8,轉(zhuǎn)換就成亂碼了。后續(xù)不用看,肯定亂。解決亂碼問題一定要先排除這個(gè)問題。

  1. 編碼不統(tǒng)一。

一個(gè)項(xiàng)目幾種編碼,什么樣的團(tuán)隊(duì)呀。子系統(tǒng)內(nèi)部可以,一跨界,完蛋。

如果出現(xiàn)亂碼,怎么排查?

一般二分法,看看服務(wù)端顯示是不是正確的,一般將參數(shù)System.out輸出到Console或者日志(一定要注意日志文件你打開時(shí)的編碼,本來輸出是對(duì)的,你反而打開亂了)。

如果能看到正確字符串,一般是第三次或第四次轉(zhuǎn)換不正確,如果看到亂碼,前二次轉(zhuǎn)換不正確。第二種情況為絕大多數(shù),因?yàn)榍耙环N情況,程序員的參與度很小。

我只說第二種情況:

  1. 首先確定是URL參數(shù),還是POST參數(shù)亂碼。

  2. 根據(jù)1獲取urlEncoding或request.getCharsetEncoding.

  3. 通過查看瀏覽器,或通過httpwatch或tcpdump等工具來確定客戶端請(qǐng)求的編碼。在我國基本上GBK,UTF-8。UTF-8基本用3個(gè)字節(jié)表示中文,GBK用兩處,很好區(qū)分。

  4. 改成一致就好了。

                       2016-12-24夜,蘇州

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享標(biāo)題:Web開發(fā)亂碼問題原理分析-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://aaarwkj.com/article40/gdiho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站內(nèi)鏈、定制網(wǎng)站靜態(tài)網(wǎng)站、建站公司、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
欧美日本一道本一区二区三区| 九月丁香花开综合网| 亚洲精品美女久久久久高潮| 国产熟女真实乱精品视频| 亚洲毛片一区二区在线| 日韩在线一区二区三区电影| 国产精品国产一级国产av| 欧美成人精品免费在线| 91精品国产自产在线观看| 亚洲一区二区三区香蕉不卡| 韩国三级网站在线观看视频| 国产亚洲中文久久网久久| 国产成人精品手机在线观看| 丝袜美腿一区二区三区| 精品一区二区日本高清| 国产白浆视频在线观看| 日韩亚洲欧美精品另类| 四影虎影永久免费观看| 91在线视频国产网站| 日韩精品一区二区视频| 欧美性生活真实的视频| 亚洲一区二区三区日韩欧美| 992免费影院 在线观看| 国产三级尤物在线观看| 欧美精品一区二区久久| 午在线亚洲男人午在线| 亚洲欧洲精品专线九九| 成人午夜在线免费观看| 日本高清不卡在线播放| 一本久道久久综合久久鬼色| 99热久久精品免费精品| 日韩av有码在线播放| 高级会所口爆视频在线播放视频| 97国产精品视频在线观看| 内射嫩国产欧美国产日韩欧美| 精品人妻一区三区蜜桃| 五月婷婷丁香视频在线| 饥渴少妇高潮露脸嗷嗷叫| 永久免费成人在线视频| 久久国产欧美日韩精品免费| 亚洲综合国产一二三四五区|