バイト配列を文字列に変換しようとしています。バイト配列にはプリアンブルが含まれており(使用するエンコーダーにプリアンブルが含まれている場合)、バイト配列にプリアンブルが格納されていない場合は、デフォルトのエンコードを指定する必要があります。
私のコードは次のようになります
public static string ArrayToStringUsingPreambleOrDefaultEncoder(byte[] bytes, Encoding defaultEncoder, out Encoding usedEncoder) {
using (var mem = new MemoryStream(bytes))
using (var reader = new StreamReader(mem, defaultEncoder, true)) {
string result = reader.ReadToEnd();
usedEncoder = reader.CurrentEncoding;
return result;
}
}
しかし、それは私が期待するようなトリックをしません。StreamReaderに、プリアンブルで指定されたエンコーディング、またはプリアンブルが見つからない場合のデフォルトのエンコーディングを使用させるにはどうすればよいですか。正しいものを見つけるために、すべての既知のエンコーダーのプリアンブルを配列の先頭と手動で比較する必要がありますか?