【问题标题】:.NET Webservice = The surrogate pair is invalid.NET Webservice = 代理对无效
【发布时间】:2009-12-10 23:37:45
【问题描述】:

调用 Web 服务时出现以下抛出的错误。谷歌搜索没有任何结果,然后有人问同样的问题。

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);

【问题讨论】:

    标签: .net web-services asmx


    【解决方案1】:

    可能发生的情况是:

    • XML 文件包含字节 ED A1 A0 27。根据 chardet 的说法,这很可能是用 IBM866 编码的эба'
    • 但它缺少 encoding 声明,因此解析器假定它是 UTF-8。
    • 文本被解码为 UTF-16 字符串 D860 0027。
    • 由于未配对的代理项 D860,此字符串不是有效的 UTF-16,因此您会遇到异常。

    【讨论】:

    • 有趣。你怎么知道的?
    • 原来是你所说的错误字符,是由于在 MSWord/Excel 之间复制然后插入数据库而引起的。我使用以下字符串清除了坏字符,字符串 re = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]"; return Regex.Replace(text, re, string.Empty);
    猜你喜欢
    • 2011-04-10
    • 2011-01-07
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2016-11-23
    • 2018-03-28
    相关资源
    最近更新 更多