使用LINQPad測試C#的UrlEncode、EscapeDataString、EscapeUriString 差異


使用LINQPad測試UrlEncode

源由是我ASP.NET的程式要與對方ASP的程式做資料的傳遞
因對方傳給我的是BIG 5編碼 ,所以我也是傳BIG 5的編碼給對方,
但是對方卻說我傳的是亂碼
我就先UrlEncode後,再用BIG 5送過去,讓他自己去傷腦筋UrlDecode的問題 
也因此才會有此次測試的產生


正文開始

首先要幫LINQPad加入System.web.dll的參考,不然無法使用UrlEncode:
在LINQPad工具列 --> Query --> Query Properties
選擇“Additional Reference”中的“Add”按钮加入要參考的DLL
( 參考文章:
五步快速使用LINQPad尝鲜StreamInsight
http://www.cnblogs.com/StreamInsight/archive/2011/07/05/5-Quick-Steps-for-Trying-Out-StreamInsight-with-LINQPad.html )


LINQPad中的原始碼
 void Main() 
    string coded = ""; 
    string test = " 中文 This is a value 中文 123 "; 

    coded = System.Web.HttpUtility.UrlEncode(test).Dump();      
    System.Web.HttpUtility.UrlDecode(coded).Dump(); 
    
    coded = System.Uri.EscapeDataString(test).Dump(); 
    System.Uri.UnescapeDataString(coded).Dump(); 
    System.Web.HttpUtility.UrlDecode(coded).Dump(); 

    coded = System.Uri.EscapeUriString(test).Dump();    
    System.Uri.UnescapeDataString(coded).Dump(); 
    System.Web.HttpUtility.UrlDecode(coded).Dump(); 

//結果 
%3corder%3e+%e4%b8%ad%e6%96%87+This+is+a+value+%e4%b8%ad%e6%96%87+123+%3c%2forder%3e 
<order> 中文 This is a value 中文 123 </order>

%3Corder%3E%20%E4%B8%AD%E6%96%87%20This%20is%20a%20value%20%E4%B8%AD%E6%96%87%20123%20%3C%2Forder%3E 
<order> 中文 This is a value 中文 123 中文 This is a value 中文 123 </order>

%3Corder%3E%20%E4%B8%AD%E6%96%87%20This%20is%20a%20value%20%E4%B8%AD%E6%96%87%20123%20%3C/order%3E 
<order> 中文 This is a value 中文 123 中文 This is a value 中文 123 </order>


總結:
Encode後的文字是有些不一樣的,但都可用UrlDecode解開

不過ASP沒有內建UrlDecode,如果用與程式交換資料,是會有些問題的

後來雙方都改用UTF8編碼,才解決這件事

留言