In diesem Fall ist es nicht so sichtbar, wie es in meinem Fall war. Heute habe ich versucht, Daten aus der Zwischenablage zu kopieren, aber es gab ein paar Unicode-Zeichen. Die Daten, die ich bekam, waren so, als würde ich eine UTF-8-codierte Datei in Windows-1250-Codierung (lokale Codierung in meinem Windows) lesen.
Es scheint, Sie Fall ist das gleiche. Wenn Sie die HTML-Daten speichern (denken Sie daran, nicht breakable Leerzeichen = 0xa0 hinter dem Zeichen Â, kein Standard-Leerzeichen) in Windows-1252 (oder Windows-1250; beide Werke). Dann öffne diese Datei als UTF-8-Datei und du wirst sehen, was da sein sollte.
Für mein anderes Projekt habe ich eine Funktion, die Daten mit beschädigter Codierung reparieren.
In diesem Fall sollten einfache Umwandlung ausreichend sein:
byte[] data = Encoding.Default.GetBytes(text);
text = Encoding.UTF8.GetString(data);
Meine ursprüngliche Funktion ein wenig komplexer ist und enthält Tests, um sicherzustellen, dass die Daten ...
public static bool FixMisencodedUTF8(ref string text, Encoding encoding)
{
if (string.IsNullOrEmpty(text))
return false;
byte[] data = encoding.GetBytes(text);
// there should not be any character outside source encoding
string newStr = encoding.GetString(data);
if (!string.Equals(text, newStr)) // if there is any character "outside"
return false; // leave, the input is in a different encoding
if (IsValidUtf8(data) == 0) // test data to be valid UTF-8 byte sequence
return false; // if not, can not convert to UTF-8
text = Encoding.UTF8.GetString(data);
return true;
}
ich nicht beschädigt sind weiß, dass dies nicht die beste (oder richtige Lösung) ist, aber ich habe keine andere Möglichkeit gefunden, wie die Eingabe zu beheben ...
EDIT: (20. Juli 2017)
Es scheint, wie die Microsoft bereits diesen Fehler gefunden und es funktioniert nun korrekt. Ich bin nicht sicher, ob das Problem in einigen Frameworks ist, aber ich weiß mit Sicherheit, dass die Anwendung jetzt ein anderes Framework verwendet als in der Zeit, als ich die Antwort geschrieben habe. (Jetzt ist es 4.5, die vorherige Version 2.0 war)
(jetzt all meine Code schlagen fehl, die Daten in dem Parsen Es gibt ein weiteres Problem, das richtige Verhalten für die Anwendung mit fix bereits aplied und ohne Verlegenheit zu bestimmen..)