2009-04-09 135 views
19

我有一個ANSI編碼的文件,我想將從文件讀取的行轉換爲ASCII。使用C#將ANSI文本文件轉換爲ASCII碼

如何在C#中執行此操作?


編輯:如果我使用 「BinaryReader在」 BinaryReader reader = new BinaryReader(input, Encoding.Default); 但讀者需要(流,編碼) 但 「流」 是一個抽象的!我應該在哪裏放置他將讀取的文件的路徑?

+0

爲什麼你認爲你想將它轉換爲ASCII?答案可能會揭示你實際上應該將其轉換爲... – Guffa 2009-04-09 13:54:26

回答

30

從ANSI到ASCII的直接轉換可能不總是可能的,因爲ANSI是ASCII的超集。

您可以嘗試使用Encoding轉換爲UTF-8,雖然:

Encoding ANSI = Encoding.GetEncoding(1252); 

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

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

當然你也可以更換ASCII UTF8,但並沒有真正意義,因爲:

  • 如果原始字符串不包含任何字節> 126,那麼它已經是ASCII
  • 如果原始字符串包含一個或多個字節> 126,那麼這些字節將丟失

UPDATE:

針對更新的問題,你可以使用BinaryReader這樣的:

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

基本上,你需要指定一個Encoding當讀/寫文件。例如:

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

注意,一旦你讀它,text實際上是unicode在內存中時。

您可以使用Encoding.GetEncoding來選擇不同的代碼頁。

+0

好的答案,特別是指出你可以使用靜態File方法,而不需要直接涉及FileStreams或緩衝區。 – Noldorin 2009-04-09 12:14:49