Подтвердить что ты не робот

Как читать ANSI-кодированный файл, содержащий специальные символы

Я пишу политику проверки TFS, которая проверяет, находятся ли наши исходные файлы, содержащие наш заголовок файла.

Моя проблема в том, что наш заголовок файла содержит специальный символ "©", и, к сожалению, некоторые из наших исходных файлов закодированы в ANSI. Поэтому, если я прочитаю эти файлы в политике, строка будет выглядеть так: "Copyright 2009".

string content = File.ReadAllText(pendingChange.LocalItem);

Я устал менять кодировку строки, но это не помогает. Итак, как я могу прочитать эти файлы, я получаю правильную строку "Copyright © 2009"?

Спасибо за помощь!

С уважением Eny

4b9b3361

Ответ 1

Используйте Encoding.Default:

string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

Однако вы должны знать, что это читает его с использованием системного кодирования по умолчанию - это может быть не то же самое, что кодировка файла. Нет единой кодировки, называемой ANSI, но обычно, когда люди говорят о "кодировке ANSI", они означают код Windows Code 1252 или что-то вроде того, что использует их ящик.

Ваш код будет более надежным, если вы сможете узнать точное кодирование.

Ответ 2

Казалось бы разумным, если у вас будет такая политика, что у вас также будет стандартная кодировка команды. Честно говоря, я не понимаю, почему любая команда будет использовать кодировку, отличную от "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 сделать что-то проще?