StreamReader
может только догадываться относительно определенных кодировок.В идеале вы должны выяснить, какова на самом деле кодировка , а затем использовать ее для чтения файла.Для чего создан файл и что позволяет правильно его читать?Показывает ли последняя программа, какую кодировку она использует?(Например, он может использовать что-то вроде Windows-CP1252.)
Я бы лично рекомендовал бы использовать UTF-8 в качестве выходной кодировки, если вы можете, но это зависит от того,Вы можете контролировать все, что потом читает.
РЕДАКТИРОВАТЬ: Хорошо, теперь я видел файл, я могу подтвердить, что не UTF-8.Слово "direktør" представляется в виде этих байтов:
64 69 72 65 6b 74 f8 72
Таким образом, не-ASCII символ представляет собой один байт (F8), который является , а не действительным представлением UTF-8символ.
Это может быть ISO-Latin-1 - не ясно (есть несколько кодировок, которые будут соответствовать).Если это так, вы можете использовать:
Encoding encoding = Encoding.GetEncoding(28591);
using (TextReader reader = new StreamReader(filename, encoding))
{
...
}
(В качестве альтернативы используйте File.ReadAllLines
, чтобы упростить жизнь.)
Вам нужно будет работать отдельнокакую выведите нужную вам кодировку.
РЕДАКТИРОВАТЬ: Вот короткая, но полная программа, которую я запустил для файла, который вы указали, и который правильно преобразовал символ в UTF-8:
using System;
using System.IO;
using System.Text;
class Test
{
static void Main()
{
Encoding encoding = Encoding.GetEncoding(28591);
StringBuilder output = new StringBuilder();
using (TextReader reader = new StreamReader("file.html", encoding))
{
string line;
while ((line = reader.ReadLine()) != null)
{
output.AppendLine("Read line: " + line);
}
}
using (StreamWriter writer = new StreamWriter("output.html", false))
{
writer.Write(output);
}
}
}