Wydaje się rozsądne, jeśli będziesz mieć takie zasady, że chcesz, aby zespół uzgodnił standardowe kodowanie. Szczerze mówiąc, nie rozumiem, dlaczego jakikolwiek zespół użyłby kodowania innego niż "Unicode (UtF-8 z podpisem) - strona kodowa 65001" (z wyjątkiem może stron ASPX ze znaczącą statyczną zawartością niepochodzącą z Ameryki Łacińskiej, ale nawet wtedy mogę " t zobaczyć, jak używanie UTF-8 byłoby wielce trudne).
Zakładając, że nadal chcesz zezwalać na mieszane kodowania, musisz następnie ustalić, w którym kodowaniu zapisano plik, aby wiedzieć, które kodowanie przekazać do ReadAllText
. Nie jest to łatwe do określenia z pliku, jednak użycie polecenia Encoding.Default
może działać poprawnie. Ponieważ najprawdopodobniej masz tylko 2 kodowania, z którymi musisz sobie poradzić, VS (UTF-8 z podpisem) i wspólne kodowanie ANSI używane przez ciebie (prawdopodobnie Windows-1252).
Stąd stosując
string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);
zadziała. (Jak widzę Jon już opublikował). Dzieje się tak, ponieważ gdy BOM UTF-8 (co oznacza, że VS oznacza termin "sygnatura") jest obecny na początku pliku, dostarczony parametr kodowania jest ignorowany, a mimo to jest używane UTF-8. W związku z tym, gdy plik jest zapisywany za pomocą UTF-8, otrzymujesz poprawne wyniki, a tam, gdzie używa się ANSI, najprawdopodobniej otrzymasz poprawne wyniki.
BTW jeśli przetwarzasz nagłówki plików, czy nie ułatwiłoby to ReadAllLines
?.
czy nadal używasz nagłówków plików? Wydają się mało wartościowe ... –
@Mitch: Co byś polecił zamiast nosić informacje o prawach autorskich w kodzie źródłowym? – AnthonyWJones
To nie jest nasza decyzja, to polityka firmy. – Enyra