Convertendo arquivo de texto de ANSI para ASCII usando C #

votos
19

Eu tenho um arquivo codificado em ANSI, e eu quero converter as linhas I lidos do arquivo para ASCII.

Como faço para ir sobre como fazer isso em C #?


EDIT: E se eu usei BinaryReader BinaryReader reader = new BinaryReader(input, Encoding.Default); , mas este leitor leva (Stream, Encoding), mas Stream é um resumo! E onde eu deveria colocar o caminho do arquivo que ele vai ler?

Publicado 09/04/2009 em 12:50
fonte usuário
Em outras línguas...                            


2 respostas

votos
30

A conversão direta de ANSI para ASCII pode não ser sempre possível, desde ANSI é um super conjunto de ASCII.

Você pode tentar converter para UTF-8, utilizando Encoding, no entanto:

Encoding ANSI = Encoding.GetEncoding(1252);

byte[] ansiBytes = ANSI.GetBytes(str);
byte[] utf8Bytes = Encoding.Convert(ANSI, Encoding.UTF8, ansiBytes);

String utf8String = Encoding.UTF8.GetString(utf8Bytes);

Claro que você pode substituir UTF8 com ASCII, mas que realmente não faz sentido uma vez que:

  • Se a string original não contém qualquer byte> 126, então já é ASCII
  • Se a string original contém um ou mais bytes> 126, em seguida, os bytes serão perdidos

ATUALIZAR:

Em resposta à pergunta atualizado, você pode usar BinaryReaderassim:

BinaryReader reader = new BinaryReader(File.Open("foo.txt", FileMode.Open),
                                       Encoding.GetEncoding(1252));
Respondeu 09/04/2009 em 12:55
fonte usuário

votos
23

Basicamente, você precisa especificar um Encodingao ler / gravar o arquivo. Por exemplo:

// 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);

Note-se que uma vez que você lê-lo, texté realmente unicode quando na memória.

Você pode escolher diferentes códigos de páginas usando Encoding.GetEncoding.

Respondeu 09/04/2009 em 12:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more