Shift-JIS や UTF8 NoBOM など、さまざまな形式のファイルを扱っています。少しの言語知識を使用して、ファイルが UTF8 または ShiftJIS として正しく解釈されているかどうかを検出できますが、ファイルが読み込んだタイプではないことが検出された場合、私の新しいエンコーディングを指定してファイルを再読み込みする必要なく、インメモリ配列。
現在、Shift-JIS を想定してファイルを読み込んでいます。
using (StreamReader sr = new StreamReader(path, Encoding.GetEncoding("shift-jis"), true))
{
String line = sr.ReadToEnd();
// Detection must be done AFTER you read from the file. Silly rabbit.
fileFormatCertain = !sr.CurrentEncoding.Equals(Encoding.GetEncoding("shift-jis"));
codingFromBOM = sr.CurrentEncoding;
}
そして、それが既知の形式 (BOM がある) であるか、データが Shift-JIS として意味があるかを判断する魔法を実行した後、すべて問題ありません。ただし、データがゴミの場合は、次の方法でファイルを再読み取りしています。
using (StreamReader sr = new StreamReader(path, Encoding.UTF8))
{
String line = sr.ReadToEnd();
}
この再読み取りステップを回避し、可能であればメモリ内のデータを再解釈しようとしています。
それとも魔法がすでに起こっていて、二重の I/O アクセスについて不必要に心配しているのですか?