Conversion du fichier texte de ANSI en ASCII en utilisant C#
j'ai un fichier encodé ANSI, et je veux convertir les lignes que j'ai lues du fichier en ASCII.
Comment puis-je faire cela en C#?
EDIT : Que faire si j'ai utilisé " BinaryReader"
BinaryReader reader = new BinaryReader(input, Encoding.Default);
mais ce lecteur prend (Stream, Encoding)
mais "Stream" est un résumé! Et où dois-je mettre le chemin du fichier qu'il va lire ?
2 réponses
une conversion directe de L'ANSI en ASCII n'est pas toujours possible, puisque L'ANSI est un super-ensemble d'ASCII.
vous pouvez essayer de convertir en UTF-8 en utilisant Encoding
:
Encoding ANSI = Encoding.GetEncoding(1252);
byte[] ansiBytes = ANSI.GetBytes(str);
byte[] utf8Bytes = Encoding.Convert(ANSI, Encoding.UTF8, ansiBytes);
String utf8String = Encoding.UTF8.GetString(utf8Bytes);
bien sûr, vous pouvez remplacer UTF8 avec l'ASCII, mais qui n'a pas vraiment de sens puisque:
- si la chaîne originale ne contient aucun octet > 126, alors C'est déjà ASCII
- si la chaîne contient un ou plusieurs octets > 126, puis ceux octets seront perdues
mise à jour:
en réponse à la question mise à jour, vous pouvez utiliser BinaryReader
comme ceci:
BinaryReader reader = new BinaryReader(File.Open("foo.txt", FileMode.Open),
Encoding.GetEncoding(1252));
en gros, vous devez spécifier un Encoding
lors de la lecture/écriture du fichier. Par exemple:
// read with the **local** system default ANSI page
string text = File.ReadAllText(path, Encoding.Default);
// ** I'm not sure you need to do this next bit - it sounds like
// you just want to read it? **
// write as ASCII (if you want to do this)
File.WriteAllText(path2, text, Encoding.ASCII);
Notez qu'une fois que vous l'avez lu, text
est en fait unicode lorsque dans la mémoire.
vous pouvez choisir différentes pages de code en utilisant Encoding.GetEncoding
.