国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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編碼了。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 剑河县| 巢湖市| 保德县| 黑龙江省| 松滋市| 平顶山市| 鲁山县| 华坪县| 新民市| 福海县| 兴义市| 昭平县| 库伦旗| 静安区| 鸡西市| 客服| 孙吴县| 惠来县| 兴义市| 卢氏县| 滨州市| 阿拉善左旗| 苏尼特左旗| 尼玛县| 沾化县| 华坪县| 韶山市| 耒阳市| 贺兰县| 东明县| 吉木乃县| 江孜县| 彭山县| 宁晋县| 连平县| 罗江县| 锦州市| 乃东县| 金坛市| 许昌市| 忻州市|