Как читать файл в кодировке ANSI, содержащий специальные символы
Я пишу политику проверки TFS, которая проверяет, содержат ли наши исходные файлы наш заголовок файла.
моя проблема заключается в том, что наш заголовок файла содержит специальный символ "©" и, к сожалению, некоторые из наших исходных файлов закодированы в ANSI.
Поэтому, если я прочитаю эти файлы в политике, строка выглядит так: "Copyright � 2009".
string content = File.ReadAllText(pendingChange.LocalItem);
Я устал менять кодировку строки, но это не помогает. Так как я могу прочитать эти файлы, что я получаю правильный строка "Copyright © 2009"?
Спасибо за помощь!
С Уважением Отказывать
2 ответов:
использовать
Encoding.Default:string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);вы должны знать, однако, что это читает его, используя системную кодировку по умолчанию - которая может не совпадать с кодировкой файла. Там нет ни одной кодировки под названием ANSI, но обычно когда люди говорят о" кодировке ANSI", они имеют в виду кодовую страницу Windows 1252 или независимо от того, что их коробка использует.
ваш код будет более надежным, если вы можете узнать точно кодировка.
было бы разумно, если бы у вас были такие политики, что вы также согласовали бы стандартную кодировку. Если честно, я не могу понять, почему любая команда будет использовать кодирование, кроме "Юникод (UTF-8 с сигнатурой) - кодовая страница 65001" (за исключением, возможно, для aspx-страниц с значительными нелатинские статического контента, но даже тогда я не могу видеть, как это будет большое дело, чтобы использовать UTF-8).
предполагая, что вы все еще хотите разрешить смешанные кодировки, вам нужно определить, какой кодирование файла было сохранено, чтобы вы знали, какую кодировку передать
ReadAllText. Его не легко определить это из файла, однако с помощьюEncoding.Defaultскорее всего, будет работать нормально. Поскольку, скорее всего, у вас есть только 2 кодировки для работы, VS (UTF-8 с сигнатурой) и общая кодировка ANSI, используемая вашими машинами (вероятно, Windows-1252).следовательно, используя
string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);будет работать. (Как я вижу Джон уже написал). Это работает, потому что когда UTF-8 BOM (что означает VS под термином "сигнатура") присутствует в начале файла указанный параметр кодировки игнорируется и UTF-8 используется в любом случае. Следовательно, где файл сохраняется с помощью UTF-8 вы получаете правильные результаты и где ANSI используется вы, скорее всего, также получить правильные результаты.
кстати, если вы обрабатываете заголовки файлов не будет
ReadAllLinesсделать вещи проще?.
Comments