Ich muss in der Lage sein, eine beliebige Texteingabe zu nehmen, die einen Byte Order Marker (BOM) haben kann, um ihre Kodierung zu markieren, und sie als ASCII auszugeben. Wir haben einige alte Tools, die BOMs nicht verstehen, und ich muss ihnen Daten senden, die nur ASCII sind.
Ich habe diesen Code gerade fertig geschrieben und kann nicht glauben, wie ineffizient das ist. Vier Kopien der Daten, ganz zu schweigen von den internen Zwischenpuffern im StreamReader. Gibt es eine bessere Möglichkeit, dies zu tun?
// 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);
Ich brauche den StreamReader(), weil er einen internen BOM-Detektor hat, um die Kodierung zu wählen, um den Rest der Datei zu lesen. Der Rest ist dann nur noch die Umwandlung in den endgültigen ASCII-String.
Gibt es eine bessere Möglichkeit, dies zu tun?