2009-12-10 54 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