Ваша проблема в том, что вы делаете это наоборот.line
не показывает кириллицу.Символы, на которые вы смотрите, являются Windows-1257
символами.Когда вы сохраняете строку как кодировку, вы сопоставляете символы с этой кодировкой, а не интерпретируете их как эту кодировку, что означает, что это только приведет к ее дальнейшему повреждению.
Также поймите, что текст в .Net не имеет кодировки (или, в любом случае, кодировка не нужна заботе ).String
- это просто String
, серия символов Юникода.Кодировка становится релевантной только тогда, когда вам это нужно в байтах.
Поскольку мы знаем, что эти символы в кодировке Windows-1257
будут содержать правильные значения байтов, необходимые для их просмотра в CP866
, но при этомв тот момент, когда они являются чисто-Unicode String
и , а не Windows-1257
, вам нужно сначала преобразовать его в windows-1257
байтов, а затем интерпретировать этих байтовкак CP866
.
String line = "¸ą¤®åą Øā«ģ";
Encoding cp866 = Encoding.GetEncoding("CP866");
Encoding w1257 = Encoding.GetEncoding("windows-1257");
Byte[] w1257Bytes = w1257.GetBytes(line);
String lineFinal = cp866.GetString(w1257Bytes);