19

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

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


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

4

2 に答える 2

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

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

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

アップデート:

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

BinaryReader reader = new BinaryReader(File.Open("foo.txt", FileMode.Open),
                                       Encoding.GetEncoding(1252));
于 2009-04-09T11:55:53.347 に答える
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、メモリ内では実際にはユニコードであることに注意してください。

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

于 2009-04-09T11:56:25.093 に答える