エンコーディングをマークするバイト オーダー マーカー (BOM) が含まれている可能性のある任意のテキスト入力を取得し、ASCII として出力できるようにする必要があります。BOM を認識しない古いツールがいくつかあり、それらに ASCII のみのデータを送信する必要があります。
今、私はこのコードを書き終えたところですが、ここでの非効率性はまったく信じられません。データの 4 つのコピー。StreamReader 内部の中間バッファーは言うまでもありません。これを行うより良い方法はありますか?
// i_fileBytes is an incoming byte[]
string unicodeString = new StreamReader(new MemoryStream(i_fileBytes)).ReadToEnd();
byte[] unicodeBytes = Encoding.Unicode.GetBytes(unicodeString.ToCharArray());
byte[] ansiBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes);
string ansiString = Encoding.ASCII.GetString(ansiBytes);
StreamReader() が必要なのは、ファイルの残りを読み取るためのエンコーディングを選択するための内部 BOM 検出器があるためです。あとは、最終的な ASCII 文字列に変換するだけです。
これを行うより良い方法はありますか?