webBrowser post的亂碼問題

 項目:xx 之 手工派單

項目介紹: xx 有兩個派單形式,一是自動派單,二是手工派單.自動派單已經有程序實現,因此,需要用c#實現手工派單模塊,由於xx的派單流程是 從綜合告警(c/s)傳 整個告警對象的某些設置的屬性 到emos(電子運維)系統(b/s),因此,在該模塊中,用到了webbrowser控件.

程序處理流程介紹:

在程序中,首先讀取一個配置文件的結點,查找到告警對象的某個屬性,然後獲取屬性值(用反射),拼一個htm頁面.該頁面代碼如下:

string s=

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<meta http-equiv='Content-Type' content='text/html;charset=gb2312'>
<head><title>表單設置</title>
</head>
<body id='CForwardDlg' BGCOLOR='LIGHTGREY' onload='onload();'>
<form method='post' action='http://localhost/test.asp' id='ID_AlarmForm' name='ID_AlarmForm'>
<input type='hidden' name='oriAlarmId' id='ID_oriAlarmId' value='2007-8-21 21:36:42'/>
<input type='hidden' name='alarmTitle' id='ID_alarmTitle' value='HLR北京'/>
<input type='hidden' name='alarmCreateTime' id='ID_alarmCreateTime' value='www'/>
<input type='hidden' name='neType' id='ID_neType' value='beijing'/>
<input type='hidden' name='neName' id='ID_neName' value='hubeisheng'/>
<input type='hidden' name='alarmLevel' id='ID_alarmLevel' value='wuhanshi'/>
<input type='hidden' name='alarmType' id='ID_alarmType' value='12222'/>
</form>
<script language='javascript' type='text/javascript'>
function onload()
{
var tt
=document.getElementById('ID_AlarmForm');
if(tt!=undefined)
{
tt.submit();
}
}
</script>
</body>
</html>

 

然後,post接收頁面:

 

<HTML>
<head>
<title>工單手工前轉</title>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"/>
<script language="JavaScript">
<!--
function onload()
{   
    document.ID_AlarmForm.submit();
}

-->
</script>
</head>
<BODY BGCOLOR=LIGHTGREY>
<div  id="DB">
</div>
<pre>
userName        :
<% =request("userName"%>
systemName      :
<% =request("systemName"%>
serSupplier     :
<% =request("serSupplier"%>
serCaller       :
<% =request("serCaller"%>
callTime        :
<% =request("callTime"%>
alarmID         :
<% =request("alarmID"%>
orialarmId      :
<% =request("oriAlarmId"%>
alarmTitle      :
<% =request("alarmTitle"%>
alarmCreateTime :
<% =request("alarmCreateTime"%>
neType          :
<% =request("neType"%>
neName          :
<% =request("neName"%>
alarmLevel      :
<% =request("alarmLevel"%>
alarmType       :
<% =request("alarmType"%>
alarmRedefLevel :
<% =request("alarmRedefLevel"%>
alarmRedefType  :
<% =request("alarmRedefType"%>
alarmLocation   :
<% =request("alarmLocation"%>
alarmDetail     :
<% =request("alarmDetail"%>
alarmPropose    :
<% =request("alarmPropose"%>
alarmRegion     :
<% =request("alarmRegion"%>
</pre>
<!-- 當派單成功或取消時模擬Click下面相應的BUTTON,ID保持不變-->
<BUTTON STYLE="WIDTH:30" ID="ButtonOK">確定</BUTTON>
<BUTTON STYLE="WIDTH:30" ID="ButtonCancel">取消</BUTTON>

</BODY>
</HTML>

webbrowser綁定:

webBrowser.DocumentText=s;

最後,在頁面上,webbrowser上顯示的結果,最後接收頁面,中文會出現亂碼.而如果把這兩處代碼保存爲htm 和asp頁面後,瀏覽htm頁面post後asp頁面不會出現亂碼.

解決辦法:

程序中不拼寫第一個頁面,改爲這樣的:

strTemp = string.Format(@"{0}={1}&", s, System.Web.HttpUtility.UrlEncode(strValue, System.Text.Encoding.GetEncoding("gb2312")));
                    strBuilder.Append(strTemp);

既弄成象url地址一樣的串.但是,主要的一點,還是 System.Web.HttpUtility.UrlEncode的轉換.

最後,綁定到webbrowser控件:

 string headers = "Content-Type: application/x-www-form-urlencoded";
            this.webBrowser.Navigate(http://localhost/test.asp, "", System.Text.Encoding.GetEncoding("gb2312").GetBytes(s), headers);

 

讀取webBrowser的源碼

不能夠直接用webBrowser.DocumentText讀取,這樣出來的是亂碼

 System.IO.StreamReader streamReader = new System.IO.StreamReader(this.webBrowser.DocumentStream, System.Text.Encoding.GetEncoding("gb2312"));
            string strWebBrowserDocument = streamReader.ReadToEnd();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章