• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
    問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

    xmlhttp 亂碼 比較完整的解決方法 (UTF8,GB2312 編碼 解碼)

    來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:52:35
    文檔

    xmlhttp 亂碼 比較完整的解決方法 (UTF8,GB2312 編碼 解碼)

    xmlhttp 亂碼 比較完整的解決方法 (UTF8,GB2312 編碼 解碼):用XMLHTTP Post Form時(shí)的表單亂碼有兩方面的原因——Post表單數(shù)據(jù)時(shí)中文亂碼;服務(wù)器Response被XMLHTTP不正確編碼引起的亂碼。換句話說(shuō),本文主要解決兩個(gè)問(wèn)題——怎樣正確Post中文內(nèi)容&怎樣正確顯示得到的中文內(nèi)容。 Part I Post中文內(nèi)容 先看
    推薦度:
    導(dǎo)讀xmlhttp 亂碼 比較完整的解決方法 (UTF8,GB2312 編碼 解碼):用XMLHTTP Post Form時(shí)的表單亂碼有兩方面的原因——Post表單數(shù)據(jù)時(shí)中文亂碼;服務(wù)器Response被XMLHTTP不正確編碼引起的亂碼。換句話說(shuō),本文主要解決兩個(gè)問(wèn)題——怎樣正確Post中文內(nèi)容&怎樣正確顯示得到的中文內(nèi)容。 Part I Post中文內(nèi)容 先看

    用XMLHTTP Post Form時(shí)的表單亂碼有兩方面的原因——Post表單數(shù)據(jù)時(shí)中文亂碼;服務(wù)器Response被XMLHTTP不正確編碼引起的亂碼。換句話說(shuō),本文主要解決兩個(gè)問(wèn)題——怎樣正確Post中文內(nèi)容&怎樣正確顯示得到的中文內(nèi)容。

    Part I Post中文內(nèi)容

    先看看E文的表單是怎么提交的:
    代碼如下:
    <SCRIPT language="JavaScript"> 
    strA = "submit1=Submit&text1=scsdfsd"; 
    var oReq = new ActiveXObject("MSXML2.XMLHTTP"); 
    oReq.open("POST","http://ServerName/VDir/TstResult.asp",false); 
    oReq.setRequestHeader("Content-Length",strA.length);   
    oReq.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded"); 
    oReq.send(strA); 
    </SCRIPT> 

    如果把strA = "submit1=Submit&text1=scsdfsd";換成:
    strA = "submit1=Submit&text1=中文";

    你會(huì)發(fā)現(xiàn)提交上去的東東根本不對(duì),ASP中Request.Form("Text1")根本取不到值。俺用Request.BinaryRead把一個(gè)HTML Form中的Post內(nèi)容寫(xiě)出來(lái)看了看,才發(fā)現(xiàn)問(wèn)題——Form提交時(shí)也要編碼的,編碼后的中文是類(lèi)似于%??%??的轉(zhuǎn)義字符,比如“中文”就被編碼為:%D6%D0%CE%C4。呵呵,也怪俺笨,人家CONTENT-TYPE里明明寫(xiě)的清清楚楚——application/x-www-form-urlencoded,urlencoded嘛當(dāng)然就是這個(gè)樣子了。既然這樣,那我們也知道該怎么辦了——自己做轉(zhuǎn)換,代碼見(jiàn)下:
    代碼如下:
    <SCRIPT language="VBScript"> 
    Function URLEncoding(vstrIn) 
        strReturn = "" 
        For i = 1 To Len(vstrIn) 
            ThisChr = Mid(vStrIn,i,1) 
            If Abs(Asc(ThisChr)) < &HFF Then 
                strReturn = strReturn & ThisChr 
            Else 
                innerCode = Asc(ThisChr) 
                If innerCode < 0 Then 
                    innerCode = innerCode + &H10000 
                End If 
                Hight8 = (innerCode  And &HFF00)\ &HFF 
                Low8 = innerCode And &HFF 
                strReturn = strReturn & "%" & Hex(Hight8) &  "%" & Hex(Low8) 
            End If 
        Next 
        URLEncoding = strReturn 
    End Function 

    strA = URLEncoding("submit1=Submit&text1=中文") 
    oReq = CreateObject("MSXML2.XMLHTTP") 
    oReq.open "POST","http://ServerName/VDir/TstResult.asp",false 
    oReq.setRequestHeader "Content-Length",Len(strA) 
    oReq.setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded" 
    oReq.send strA 
    </ScRIPT> 

    (在這里俺把前面的JavaScript的代碼改成了VBScript,不是吃飽了撐的沒(méi)事干,原因見(jiàn)后)

    Part II.正確顯示得到的中文內(nèi)容

    OK,如果你在Server端把Form的內(nèi)容寫(xiě)到數(shù)據(jù)庫(kù)/文件的話,你在那里看到的中文毫無(wú)問(wèn)題,但是,假如你想看看Server的Response——問(wèn)題來(lái)了:如果Response的結(jié)果不是XML,XMLHTTP.responseXML里當(dāng)然是不會(huì)有東東的,那就用responseText好了,在代碼的最后加一句:

    alert(oReq.responseText)
    看看俺們辛勤勞動(dòng)的結(jié)果  

    但是但是.....怎么所有的中文全變成了方格? (我打不出來(lái),有興趣自己去試,也不用Post,Get一個(gè)含有中文的網(wǎng)頁(yè)就可以發(fā)現(xiàn)了。)

    原因很簡(jiǎn)單:XMLHTTP得到Response時(shí)假定Response是UTF8編碼的,如果Response是XML,那還可以通過(guò)encoding來(lái)指定編碼,但HTML就不行了。(見(jiàn)鬼的GB2312,再次打倒!)所以它把含GB2312編碼的HTML當(dāng)成UTF8格式,不出錯(cuò)才有鬼!

    不過(guò)好在還有補(bǔ)救的辦法:XMLHTTP的responseBody 屬性里包含的可是未解碼的Resonse——"a raw undecoded bytes as received directly from the server" :),唯一的問(wèn)題是,responseBody返回的是一個(gè)unsigned bytes數(shù)組,我們?cè)趺慈ピL問(wèn)它,怎么把它轉(zhuǎn)換成BSTR?

    這就是為什么我在上面把代碼改成VBScript的原因——VBScript Can do it,but JavaScript Cannot!

    代碼見(jiàn)下:
    代碼如下:
    <SCRIPT language="VBScript"> 
    Function URLEncoding(vstrIn) 
        strReturn = "" 
        For i = 1 To Len(vstrIn) 
            ThisChr = Mid(vStrIn,i,1) 
            If Abs(Asc(ThisChr)) < &HFF Then 
                strReturn = strReturn & ThisChr 
            Else 
                innerCode = Asc(ThisChr) 
                If innerCode < 0 Then 
                    innerCode = innerCode + &H10000 
                End If 
                Hight8 = (innerCode  And &HFF00)\ &HFF 
                Low8 = innerCode And &HFF 
                strReturn = strReturn & "%" & Hex(Hight8) &  "%" & Hex(Low8) 
            End If 
        Next 
        URLEncoding = strReturn 
    End Function 

    Function bytes2BSTR(vIn) 
        strReturn = "" 
        For i = 1 To LenB(vIn) 
            ThisCharCode = AscB(MidB(vIn,i,1)) 
            If ThisCharCode < &H80 Then 
                strReturn = strReturn & Chr(ThisCharCode) 
            Else 
                NextCharCode = AscB(MidB(vIn,i+1,1)) 
                strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) 
                i = i + 1 
            End If 
        Next 
        bytes2BSTR = strReturn 
    End Function 

    strA = URLEncoding("submit1=Submit&text1=中文") 
    oReq = CreateObject("MSXML2.XMLHTTP") 
    oReq.open "POST","http://ServerName/VDir/TstResult.asp",false 
    oReq.setRequestHeader "Content-Length",Len(strA) 
    oReq.setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded" 
    oReq.send strA 
    alert bytes2BSTR(oReq.responseBody) 
    </SSRIPT>

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    xmlhttp 亂碼 比較完整的解決方法 (UTF8,GB2312 編碼 解碼)

    xmlhttp 亂碼 比較完整的解決方法 (UTF8,GB2312 編碼 解碼):用XMLHTTP Post Form時(shí)的表單亂碼有兩方面的原因——Post表單數(shù)據(jù)時(shí)中文亂碼;服務(wù)器Response被XMLHTTP不正確編碼引起的亂碼。換句話說(shuō),本文主要解決兩個(gè)問(wèn)題——怎樣正確Post中文內(nèi)容&怎樣正確顯示得到的中文內(nèi)容。 Part I Post中文內(nèi)容 先看
    推薦度:
    標(biāo)簽: 亂碼 編碼 http
    • 熱門(mén)焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門(mén)推薦

    專(zhuān)題
    Top
    主站蜘蛛池模板: 久久综合精品国产二区无码| 91精品国产高清91久久久久久| 中文字幕久精品免费视频| 久久精品一区二区国产| 精品无码一区二区三区爱欲 | 久久青青草原精品国产| 久久精品国产亚洲av瑜伽| 久久91综合国产91久久精品| 久久久久人妻精品一区二区三区| 久久久久久亚洲精品无码| 99在线精品免费视频| 精品国产乱码一区二区三区| 99久久精品影院老鸭窝| 亚洲国产精品无码久久久秋霞2| 精品97国产免费人成视频| 无码精品一区二区三区免费视频 | 午夜精品视频在线观看| 538国产精品一区二区在线| 无码人妻精品一区二区三区在线| 四虎国产精品永免费| 亚洲精品V欧洲精品V日韩精品| 国产一区二区三区在线观看精品 | 久久国产精品久久国产精品| 国产国产精品人在线观看| 奇米精品视频一区二区三区| 伊人久久大香线蕉精品不卡| 日韩精品一二三区| 欧美精品91欧美日韩操| 久久精品国产一区二区电影| 精品欧美一区二区在线看片| 婷婷精品国产亚洲AV麻豆不片| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 日韩精品无码一区二区中文字幕 | 久久精品成人一区二区三区| 精品无码国产一区二区三区51安| 亚洲国产精品激情在线观看| 亚洲一区二区三区国产精品| 精品国产一区二区三区2021| 黄床大片免费30分钟国产精品| 国产精品亚洲精品日韩已方| 国产精品一区二区三区免费|