2009-12-10 2 views
2

Obtention de l'erreur de lancement suivante lors de l'appel d'un service Web. Avoir googlé sans aucun résultat autre que les gens posant la même question..NET Webservice = La paire de substitution n'est pas valide

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 

Le service Web retourne une série de champs de texte simple à partir d'une vue en exécutant la vue et l'ouverture d'un ensemble de données et la lecture des données et en le retournant XML formaté.

EDIT

a pu résoudre ce en utilisant l'expression rationnelle suivant laquelle des bandes les mauvais caractères qui se trouvaient personnages MSWord/Excel

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

Répondre

2

Ce qui pourrait se produire est que:

  • Le fichier XML contient les octets ED A1 A0 27. Selon chardet, il était très probablement destiné à être эба' codé dans IBM866. Mais il manque une déclaration encoding, donc l'analyseur suppose que c'est UTF-8.
  • Le texte est décodé dans la chaîne UTF-16 D860 0027.
  • Cette chaîne n'est pas valide UTF-16 en raison du substitut D860 non apparié, de sorte que vous obtenez l'exception.
+0

Intéressant. Comment sais-tu cela? –

+0

Il s'avère qu'il s'agissait de mauvais caractères, comme vous le dites provoqué par la copie entre MSWord/Excel et l'insertion dans la base de données. J'ai purgé les mauvais caractères en utilisant ce qui suit, string re = @ "[^ \ x09 \ x0A \ x0D \ x20- \ xD7FF \ xE000- \ xFFFD \ x10000-x10FFFF]"; return Regex.Replace (text, re, string.Empty); –