天天看點

C#中WebService裡的回車符"\r"丢失問題

假如有定義如下的WebService方法

C#中WebService裡的輸入符"\r"丢失問題
C#中WebService裡的輸入符"\r"丢失問題

Code

        /// <summary>

        /// 計算長度

        /// </summary>

        /// <param name="text"></param>

        /// <returns></returns>

        [WebMethod]

        public int GetLen(string text)

        {

            return text.Length;

        }

如果傳送的字元串text中包含有"回車換行"字元,也就是"\r\n",那麼在C#中經WebService傳送後.在服務端接收到的資料中"\r"将會不見掉!!也就是本來"\r\n"中有兩個位元組位的卻隻有"\n"一個位元組位.

今天碰到這個BUG真郁悶(發送前的長度與接收到的長度不相同,導緻最終的簽名不符合,最後隻能将資料Base64才解決問題)...

8月16日19點後注: 根據武眉博<活靶子.Net>給的連結.知道産生字元丢失的原因是因為XML規範所定.在此多謝:)

http://xml.coverpages.org/xml10-chinese.html#sec-line-ends

C#中WebService裡的輸入符"\r"丢失問題
C#中WebService裡的輸入符"\r"丢失問題

Code

2.11 行尾處理

為編輯的友善起見,存儲XML已析實體的計算機檔案經常用行來組織。通常這些行用回車符(#xD)和換行符(#xA)的一些組合來分隔。

為了使應用的工作簡單化,對于一個外部已析實體或内部已析實體的常量實體值中包含的任何兩字元常量序列"#xD#xA"或單獨的常量#xD,XML處理器都應換成#xA傳遞給應用。(這可以通過在進行文法分析前将所有行分隔符規範成#xA而友善地實作。) 

c#