web-dev-qa-db-ja.com

C#を使用してテキストファイルをANSIからASCIIに変換する

ANSIエンコードファイルがあり、ファイルから読み取った行をASCIIに変換したい。

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


EDIT:「BinaryReader」BinaryReader reader = new BinaryReader(input, Encoding.Default);を使用した場合、このリーダーは(Stream、Encoding)を使用しますが、「Stream」は抽象です!そして、私は彼が読み取るファイルのパスをどこに置くべきですか?

19
BDeveloper

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

もちろん、UTF8をASCIIに置き換えることができますが、それは実際には意味がありません。

  • 元の文字列に126を超えるバイトが含まれていない場合、それはすでにASCIIです。
  • 元の文字列に126以上のバイトが含まれている場合、それらのバイトは失われます

更新:

更新された質問に応じて、次のようにBinaryReaderを使用できます。

BinaryReader reader = new BinaryReader(File.Open("foo.txt", FileMode.Open),
                                       Encoding.GetEncoding(1252));
30
Can Berk Güder

基本的に、ファイルの読み取り/書き込み時には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は実際にはユニコードであることに注意してください。

Encoding.GetEncodingを使用して、さまざまなコードページを選択できます。

23
Marc Gravell