cordes C# sont Unicode. Lorsqu'ils sont écrits dans un fichier, un codage doit être appliqué. L'encodage par défaut utilisé par File.WriteAllText
est utf-8 with no byte order mark.
La séquence codée sur deux octets 0xC2B0 est la représentation du signe ° degré U + 00B0 codepoint in utf-8.
Pour se débarrasser de la partie 0xC2, appliquer un codage différent, par exemple latin-1:
var latin1 = Encoding.GetEncoding(1252);
File.WriteAllText(path, text, latin1);
Pour faire face à l'idée « hex remplacer » de la question: Les meilleures pratiques pour éliminer la utf-8 L'octet principal des fichiers existants serait de faire un ReadAllText
avec utf-8, suivi d'un WriteAllText
comme indiqué ci-dessus (ou du découpage de flux si les fichiers sont trop gros pour être lus en mémoire dans leur ensemble).
SBCS encodages ne peuvent pas représenter tous les caractères Unicode, si la substitution se produira pour un tel personnage dans votre DataTable.
Le rendu comme  ° doit être blâmés sur le spectateur/éditeur que vous utilisez pour afficher le fichier.
En savoir plus: https://stackoverflow.com/a/17269952/1132334
Pourquoi 'Replace()' ne fonctionne-t-il pas? 'yourString.Replace ((char) 0xC2B0, (char) 0xB0);' – Equalsk
Il n'est pas clair ce que vous entendez par "en hexadécimal" ici. Si vous voulez dire que ce sont les données dans le fichier texte en le considérant comme * binaire *, vous devriez probablement traiter les données comme binaires pour commencer. Je suppose que vous ne voulez pas dire [U + C2B0] (http://www.fileformat.info/info/unicode/char/c2b0/index.htm). –
ce n'est pas un candidat pour les remplacements, mais un problème de codage (Unicode <> ANSI). quelle application rend cela comme "Â °"? pourriez-vous montrer un exemple minimal du code qui écrit dans le fichier? – dlatikay