2009-12-10 26 views
2

調用Web服務時出現以下拋出的錯誤。除了人們詢問同樣的問題之外,Google搜索結果沒有任何結果。.NET Webservice =代理對無效

Server was unable to process request. ---> The surrogate pair (0xD860, 0x27) is invalid. A high surrogate character (0xD800 - 0xDBFF) must always be paired with a low surrogate character (0xDC00 - 0xDFFF)."} 
System.Exception {System.Web.Services.Protocols.SoapException 

的web服務,通​​過運行視圖,並打開一個數據集,並在數據讀取和恢復它作爲格式化XML返回一系列簡單的文本字段從視圖。

編輯

之所以能夠這樣使用下面的正則表達式剝離了不良字符正好是的MSWord/Excel中的字符

string re = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]"; 
return Regex.Replace(text, re, string.Empty); 

回答

2

什麼可能發生的是解決:

  • XML文件包含字節ED A1 A0 27.根據chardet,這最有可能是打算爲在IBM866中編碼的。
  • 但它缺少一個encoding聲明,所以解析器假定它是UTF-8。
  • 將文本解碼爲UTF-16字符串D860 0027.
  • 由於未配對的代理D860,此字符串不是有效的UTF-16,所以您會得到異常。
+0

有趣。你怎麼會知道這事? – 2010-07-02 06:10:49

+0

原來,由於MSWord/Excel之間的複製,然後插入到數據庫中,這是錯誤的字符。我使用以下字符清除了錯誤的字符,string re = @「[^ \ x09 \ x0A \ x0D \ x20- \ xD7FF \ xE000- \ xFFFD \ x10000-x10FFFF]」; return Regex.Replace(text,re,string.Empty); – 2011-08-18 06:51:25