麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 網絡通信 > 正文

IIS如何接收ServerXMLHTTP傳過來的編碼字符?

2019-11-05 03:14:32
字體:
來源:轉載
供稿:網友

一. 事情的起因:

從我的組件中企圖向服務器端的asp頁面發送一個QueryString,它的值為郵件的URL。希望ASP頁面接收之后,直接將該字符串交給ExchangeOWA

由于OWA只認UTF8編碼的URL字符串,所以我們希望組件里用MSxml2::Serverxmlhttp將這個郵件URLUTF8編碼字符串發送至服務器的ASP頁面。然后ASP頁面接收之后,也就不用轉碼,直接交給OWA即可。

但是這么做,在ASP頁面中一開始拿到的字符串就是亂碼,原來的“收件箱”的UTF8碼是“%E6%94%B6%E4%BB%B6%E7%AE%B1”,IIS接收時卻是“鏀朵歡綆”!

于是在組件中直接發送漢字的“收件箱”,但是IIS接收時依然是“鏀朵歡綆”!

二. 測試的代碼:

(1). 客戶端用SXH對象POST操作提交一個Form請求的頁面:

<%@ Language=vbScript%>

<%

DataToSend = "%E6%94%B6%E4%BB%B6%E7%AE%B1" ' 收件箱的UTF8編碼

DataToSend = "id=" %26amp; DataToSend

Dim xmlhttp

Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")

這相當于提交一個Form,具體可參見微軟文檔:

HOWTO Submit Form Data by Using XMLHTTP or ServerXMLHTTP Object (Q290591)

xmlhttp.Open "POST","http://localhost/tester/Receiver.asp",false

xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

xmlhttp.send DataToSend

Response.ContentType = "text/xml"

Response.Write xmlhttp.responseXMl.xml

Set xmlhttp = nothing

%>

(2). 服務器端用Request.Form來接收提交的值的頁面:

<%

Dim objTrace

set objTrace = Server.CreateObject("p

objTrace.trace "Start OK"

value = Request.Form("id")

Response.ContentType = "text/xml"

objTrace.trace CStr("IIS接收: ") %26amp; CStr(Value)

value = server.URLEncode(value)

objTrace.trace Cstr("IISUnicode==>UTF8后的結果: ") %26amp; CStr(Value)

response.write "" %26amp; value %26amp; ""

objTrace.trace "End OK!"

%>

三. 測試結果:

用網絡探測器跟蹤表明,假如SXH對象傳遞中文字符,一定會被它事先轉為UTF8編碼的字符串,然后再發給對方服務器。這個是差不多可以確定的。

要害是,IIS接到這個UTF8編碼后,是如何處理的?

我們作了以下試驗:

測試

序號

Client

Server

客戶端提交的Form的字符串

ASP頁面通過Request.Form(“id”)得到的字符串

Server.URLEncode(value)轉碼之后的結果

1

%E6%94%B6%E4%BB%B6%E7%AE%B1

(收件箱的UTF8編碼)

鏀朵歡綆

%E6%94%B6%E4%BB%B6%E7%AE

(缺少了最后的”%B1”)

2

收件箱

鏀朵歡綆

%E6%94%B6%E4%BB%B6%E7%AE

(缺少了最后的”%B1”)

3

%E8%8D%89%E7%A8%BF

(草稿的UTF8編碼)

鑽夌

%E8%8D%89%E7%A8%BF

(這回是正確的編碼了)

4

%CA%D5%BC%FE%CF%E4

(收件箱的Unicode編碼)

收件箱

%CA%D5%BC%FE%CF%E4

(還是正確的Unicode編碼)

5

%E5%B7%B2%E5%88%A0%E9%99%A4%E9%82%AE%E4%BB%B6

(已刪除郵件的UTF8編碼)

宸插垹闄偖浠

%E5%B7%B2%E5%88%A0%E9%99%A4%E9%82%AE%E4%BB

(缺少了最后的”%B6”)

6

%25E6%2594%25B6%25E4%25BB

%25B6%25E7%25AE%25B1

(就是將收件箱的UTF8編碼再用

Server.URLEncode()轉一遍碼)

%E6%94%B6%E4%BB%B6%E7%AE%B1

(這就是正確的收件箱的UTF8編碼,直接扔給OWA即可)

%25E6%2594%25B6%25E4%25BB%25B6%25E7%25AE%25B1

四. 你認為這說明了什么:

對于試驗12IIS接收之前是UTF8編碼,但是注重是奇數個字符!

UTF8編碼實際上是真實內存中字符串存放的數據的明碼,%號相當于只是一個分割符,E是高8位,6是低8(?)

IIS接收之后,就會將其轉換為Unicode編碼,但不是明碼,所以%號不見了,由于這時的UTF8編碼是奇數個字符,IIS就錯誤地將其最后一個字符“%B1”截去。

假如拿這個鏀朵歡綆放在XML中,讓IE解釋的話,就會顯示為“收件?”。這說明鏀朵歡綆確實是正確的Unicode字符串,只是漢字少了一個字符。

對于試驗3草稿UTF8編碼是偶數個字符,所以IIS就能夠正確地轉碼,這個“鑽夌”實際上就是草稿Unicode編碼格式。

對于試驗4,你傳給IIS的已經是Unicode編碼了,所以它會自動將其再轉換為Ansi編碼,這樣就是正常的收件箱了。

對于試驗6,將中文字符的UTF8編碼再進行一次UTF8轉碼!將這個結果傳給IISIIS接到之后,可能只是將%25簡單地轉義為%號,然后就不管了。于是這就是正確的UTF8編碼了。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品一区二区免费在线观看 | 毛片在哪里看 | 国产午夜亚洲精品理论片大丰影院 | 2019中文字幕在线播放 | 一区二区视 | 久久久成人一区二区免费影院 | 羞羞视频免费网站 | 国产88久久久国产精品免费二区 | 欧美一级黄色网 | 精品国产一区二区三区四区在线 | 国产精品视频亚洲 | 欧美特级一级毛片 | 男女无套免费视频 | 欧美一区黄色 | 亚洲免费毛片基地 | 成人黄色小视频在线观看 | 国产免费视频一区二区裸体 | 日韩黄在线 | 欧美黄色性生活视频 | 欧美精品电影一区 | 久久艹综合 | 亚洲国产网址 | 一区二区三区日韩电影 | 国产精品久久久久久影院8一贰佰 | 日本网站在线播放 | 久久久久久久久日本理论电影 | 视频一区二区中文字幕 | 7777在线视频免费播放 | 做爰xxxⅹ性护士hd在线 | 国产精品视频六区 | 久草视频国产在线 | 日本欧美在线播放 | 亚洲国产二区 | 美女视频大全网站免费 | 色综合网在线观看 | 青草久久久久 | 欧美成人国产va精品日本一级 | 色播视频在线播放 | 成年免费视频黄网站在线观看 | 一级成人毛片 | 黄色av电影在线播放 |