2009-04-09 12 views
19

ANSIでエンコードされたファイルがあり、ファイルから読み込んだ行をASCIIに変換したい。C#を使用してANSIからASCIIにASCIIファイルを変換する

C#でこれを行うにはどうすればいいですか?


編集:私は "BinaryReader" BinaryReader reader = new BinaryReader(input, Encoding.Default); を使用しますが、この読者は(ストリーム、エンコーディング) が、 "ストリーム" をとる何場合は抽象的です!そして、私は彼が読むファイルのパスをどこに置くべきですか?

+0

なぜあなたはそれをASCIIに変換したいと思いますか?その答えは実際に何に変換するべきかを明らかにするかもしれません... – Guffa

答えて

30

ANSIはASCIIの上位セットであるため、ANSIからASCIIへの直接変換は必ずしも可能ではない場合があります。

あなたはしかし、Encodingを使用してUTF8に変換してみてください:もちろん

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の文字列
  • が含まれている場合、これらのバイトは失われます。

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

関連する問題