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 ?

19
demandé sur Zero Piraeus 2009-04-09 15:50:57

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));
30
répondu Can Berk Güder 2013-07-30 18:20:49

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.

23
répondu Marc Gravell 2009-04-09 11:56:25