C# Strings sind Unicode. Wenn sie in eine Datei geschrieben werden, muss eine Codierung angewendet werden. Die Standardcodierung, die von File.WriteAllText
verwendet wird, ist utf-8 with no byte order mark.
Die Zwei-Byte-Sequenz 0xC2B0 ist die Darstellung des Gradzeichens U + 00B0 Codepunkt in utf-8.
des 0xC2 Teils loszuwerden, eine andere Codierung, zum Beispiel Latin-1 gilt:
var latin1 = Encoding.GetEncoding(1252);
File.WriteAllText(path, text, latin1);
Um die "hex ersetzen" Idee der Frage zu befassen: Best Practice die utf-8 zu entfernen führendes Byte von bestehenden Dateien wäre ein ReadAllText
mit utf-8, gefolgt von einem WriteAllText
wie oben gezeigt (oder Stream-Chunking, wenn die Dateien zu groß sind, um in den Speicher als Ganzes zu lesen) zu tun.
Einzelbyte-Zeichenkodierungen können nicht alle Unicode-Zeichen darstellen, daher erfolgt die Ersetzung für ein beliebiges Zeichen in Ihrer DataTable.
Die Wiedergabe als  ° muss dem Viewer/Editor angelastet werden, den Sie zum Anzeigen der Datei verwenden.
Weiterführende Literatur: https://stackoverflow.com/a/17269952/1132334
Warum nicht 'Replace()' Arbeit? 'yourString.Replace ((char) 0xC2B0, (char) 0xB0);' – Equalsk
Es ist nicht klar, was Sie hier mit "in hex" meinen. Wenn Sie meinen, dass dies die Daten in der Textdatei sind, wenn Sie sie als * binary * betrachten, sollten Sie die Daten wahrscheinlich zunächst als Binärdaten behandeln. Meine Vermutung ist, dass Sie nicht wirklich meinen [U + C2B0] (http://www.fileformat.info/info/unicode/char/c2b0/index.htm). –
Dies ist kein Ersatzkandidat, sondern ein Codierproblem (Unicode <> ANSI). Welche Anwendung macht dies als "°"? Können Sie ein minimales Beispiel für den Code anzeigen, der in die Datei schreibt? – dlatikay