Было бы разумно, если бы у вас были такие политики, чтобы у вас также была согласованная командой стандартная кодировка. Честно говоря, я не понимаю, почему какая-либо команда использует кодировку, отличную от «Unicode (UtF-8 с подписью) - Codepage 65001» (за исключением, возможно, страниц ASPX со значительным нелатинским статическим контентом, но даже тогда я могу не понимаю, как было бы здорово использовать UTF-8).
Предполагая, что вы все еще хотите разрешить смешанные кодировки, вам понадобится способ определить, в какую кодировку был сохранен файл, чтобы вы знали, какую кодировку передать в ReadAllText
. Это не легко определить из файла, однако использование Encoding.Default
, вероятно, будет работать нормально. Поскольку, скорее всего, вам нужно иметь дело только с 2-мя кодировками, VS (UTF-8 с подписью) и общей кодировкой ANSI, используемой вашими машинами (вероятно, Windows-1252).
Следовательно, используя
string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);
будет работать. (Как я вижу, Джон уже написал). Это работает, потому что, когда в начале файла присутствует спецификация UTF-8 (то, что VS подразумевает под термином «подпись»), предоставленный параметр кодирования игнорируется, и в любом случае используется UTF-8. Следовательно, если файл сохраняется с использованием UTF-8, вы получите правильные результаты, а где используется ANSI, вы, скорее всего, также получите правильные результаты.
Кстати, если вы обрабатываете заголовки файлов, ReadAllLines
ничего не облегчит?