148 не является значением для ö
в ASCII (то есть для 7-битной американской кодировки ASCII, которая идет только до 127) или для кодированных страниц, обычно называемых ASCII, 1252 (Windows Latin1) и ИСО / МЭК 8859-1 . 1252 имеет ”
в этом месте, а в кодовой странице ISO ничего нет. Это значение используется только для ö
в старых кодовых страницах DOS, 437 и 865.
Windows, .NET и C # строки изначально являются Unicode. Эти страницы подтверждают это - StackOverflow является сайтом ASP.NET. Вы можете легко преобразовать данные в кодировки, отличные от Unicode, либо с помощью класса Encoding
, либо указав кодировку при загрузке данных из потоков с помощью StreamReader.
Например, это преобразует значение байта 148 в ö
с использованием кодовой страницы 437:
var result=Encoding.GetEncoding(437).GetString(new byte[]{148});
Debug.Assert(result=="ö");
В то время как это возвращает ”
:
var result=Encoding.GetEncoding(1252).GetString(new byte[]{148});
Перегрузка StreamReader (string, Encoding) и ее варианты могут загружать данные из файлов с использованием указанной кодировки, например:
using(var reader=new StreamReader(path,Encoding.GetEncoding(437)))
{
var line=reader.ReadLine();
....
}