3

バイト配列を文字列に変換しようとしています。バイト配列にはプリアンブルが含まれており(使用するエンコーダーにプリアンブルが含まれている場合)、バイト配列にプリアンブルが格納されていない場合は、デフォルトのエンコードを指定する必要があります。

私のコードは次のようになります

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に、プリアンブルで指定されたエンコーディング、またはプリアンブルが見つからない場合のデフォルトのエンコーディングを使用させるにはどうすればよいですか。正しいものを見つけるために、すべての既知のエンコーダーのプリアンブルを配列の先頭と手動で比較する必要がありますか?

4

1 に答える 1

2

MSDNから:「StreamReaderは特定のエンコーディングでの文字入力用に設計されています」。そうです、これを行うには、プリアンブルから正しいエンコーディングをスニッフィングする必要があります。ここにこれを行うための例の方法があります:

http://www.personalmicrocosms.com/Pages/dotnettips.aspx?c=15&t=17

編集:上記のリンクは壊れていますが、古いページはWayback Machine Internet Archiveで入手できます: https ://web.archive.org/web/20090203034127/http://www.personalmicrocosms.com/Pages/dotnettips.aspx?c = 15&t = 17 *

于 2009-12-18T14:19:07.110 に答える