diff --git a/CSharp/Libraries/UniversalEditor.UserInterface/MainWindow.cs b/CSharp/Libraries/UniversalEditor.UserInterface/MainWindow.cs index 15c4de9b..2ad95182 100644 --- a/CSharp/Libraries/UniversalEditor.UserInterface/MainWindow.cs +++ b/CSharp/Libraries/UniversalEditor.UserInterface/MainWindow.cs @@ -492,7 +492,7 @@ namespace UniversalEditor.UserInterface /// /// try to determine within a reasonable doubt whether or not is a "plain text" file (e.g. ASCII, UTF-8, UTF-16lE, UTF-16BE, UTF-32, etc.) /// - /// true, if text was ised, false otherwise. + /// true, if the specified file appears to be a text file, false otherwise. /// Filename. private bool isText(string filename) { @@ -500,13 +500,17 @@ namespace UniversalEditor.UserInterface return false; int len = 2048; + System.IO.FileInfo fi = new System.IO.FileInfo(filename); + len = (int)Math.Min(len, fi.Length); System.IO.FileStream fs = System.IO.File.Open(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read); byte[] b = fs.ReadBytes(0, len); string utf8 = System.Text.Encoding.UTF8.GetString(b); // yes I know this isn't the best way to do this - for (int i = 0; i < utf8.Length; i++) + bool isUTF8 = (b.Length >= 3 && b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF); + int start = isUTF8 ? 3 : 0; + for (int i = start; i < utf8.Length; i++) { if (Char.IsControl(utf8[i]) && !Char.IsWhiteSpace(utf8[i])) {