Warum löst en-dash (-) einen ungültigen XML-Zeichenfehler (C # / SSMS) aus?
Dies ist keine Frage, wie das @ überwunden werden ka "XML-Analyse: ... unzulässiges XML-Zeichen" Fehler, aber überWaru Es passiert Ich weiß, dass es Korrekturen gibt 1, 2, 3), müssen aber wissen, woher das Problem stammt, bevor Sie die beste Lösung auswählen (was verursacht den Fehler unter der Haube?).
Wir rufen einen Java-basierten Webservice mit C # auf. Aus den stark typisierten Daten erstellen wir eine XML-Datei, die an SQL Server übergeben wird. Die Webservice-Daten werden mit UTF-8 codiert. In C # erstellen wir die Datei und geben UTF-8 an, wo dies angebracht ist:
var encodingType = Encoding.UTF8;
// logic removed...
var xdoc = new XDocument();
xdoc.Declaration = new XDeclaration("1.0", encodingType.WebName, "yes");
// logic removed...
System.IO.File.WriteAllText(xmlFullPath, xdoc.Declaration.ToString() + xdoc.Document.ToString(), encodingType);
Hiermit wird eine XML-Datei auf der Festplatte erstellt, die die folgenden (abgekürzten) Daten enthält:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<records>
<r RecordName="Option - Foo" />
<r RecordName="Option – Bar" />
</records>
Beachten Sie, dass im zweiten Datensatz,-
ist anders als–
. Ich glaube, die zweite Instanz ist en-dash.
Wenn ich diese XML-Datei in Firefox / IE / VS2015 öffne. es öffnet sich ohne Fehler. Das W3C XML validator funktioniert auch gut. Aber SSMS 2012 mag es nicht:
declare @xml XML = '<?xml version="1.0" encoding="utf-8" standalone="yes"?><records>
<r RecordName="Option - Foo" />
<r RecordName="Option – Bar" />
</records>';
XML-Analyse: Zeile 3, Zeichen 25, ungültiges XML-Zeichen
Warum verursacht en-dash den Fehler? Aus meiner Forschung scheint es, dass
... nur ein paar Entitäten, die maskiert werden müssen: <,>, \, 'und & sowohl in HTML als auch in XML.Quell
... von denen en-dash keiner ist. Eine verschlüsselte Version (ersetzt–
mit–
) funktioniert gut
Basierend auf der Eingabe wird angegeben, dass en-dash nicht als UTF-8 erkannt wird, aber dennoch hier aufgelistet isthttp: //www.fileformat.info/info/unicode/char/2013/index.ht Warum liest SSMS den Text als XML-Code nicht (mit UTF-8 ODER UTF-16)?