我正在处理多种格式的文件,包括 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 访问?