2009-04-09 28 views
19

kullanarak dönüştürme ANSI kodlu bir dosyam var ve dosyadan okuduğum satırları ASCII'ye dönüştürmek istiyorum.Metin dosyasını ANSI'den ASCII'ye C#

Bunu C# ile yapmayı nasıl yaparım?


DÜZENLEME: i "BinaryReader" BinaryReader reader = new BinaryReader(input, Encoding.Default); kullanılan ancak bu okuyucu (Akış, Kodlama) ama "Akış" alır ne olur soyut olduğunu! Ve okuyacağı dosyanın yolunu nereye koymalıyım?

+0

Neden ASCII'ye dönüştürmek istediğinizi düşünüyorsunuz? Bunun cevabı aslında neyi dönüştürmeniz gerektiğini gösterebilir ... – Guffa

cevap

30

ANSI ASCII'nin bir üst kümesi olduğundan ANSI'den ASCII'ye doğrudan dönüştürme her zaman mümkün olmayabilir.

yapabilirsiniz olsa Encoding kullanarak UTF8 dönüştürmeyi deneyin:

Encoding ANSI = Encoding.GetEncoding(1252); 

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

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

Eğer ASCII ile UTF8 yerine, ama bu gerçekten beri mantıklı değil Tabii:

  • eğer Orijinal dize herhangi bir byte> 126 içermiyorsa, orijinal dize bir veya daha fazla bayt> 126 içeriyorsa, o zaman zaten ASCII
  • , sonra bu baytlar
  • kaybolacaktır.

GÜNCELLEME: güncellenmiş sorusuna yanıt olarak

, böyle BinaryReader kullanabilirsiniz:

BinaryReader reader = new BinaryReader(File.Open("foo.txt", FileMode.Open), 
             Encoding.GetEncoding(1252)); 
23

Temel olarak, okurken/dosya yazma bir Encoding belirtmeniz gerekir. Örneğin: zaman hafızada

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

Not kez bunu okudum text aslında Unicode olduğunu.

Encoding.GetEncoding'u kullanarak farklı kod sayfaları seçebilirsiniz.

+0

Özellikle, File Dosyalarını veya arabelleklerini doğrudan kullanmanız gerekmediğini ve statik Dosya yöntemlerini kullanabileceğinizi belirtmek için iyi bir yanıt. – Noldorin

İlgili konular