Re[6]: Об эффективности программ
От: Abidos  
Дата: 06.10.05 14:59
Оценка: +2
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Перекодирование строки из файла из 866 в 1251.


PD>Все что я нашел, сводится к


PD>public string MyDecoder(string str)

PD>{
PD> byte[] b = Encoding.GetEncoding(866).GetBytes(str);
PD> str = Encoding.GetEncoding(1251).GetString(b);
PD> return str;
PD>}

PD>или вариациям на эту тему


Код некорректен: строка (string) в .NET состоит из символов юникода и к ней не применимо понятие кодировки, поэтому вышеприведенный код просто напросто коверкает строку, т.к.
byte[] b = Encoding.GetEncoding(866).GetBytes(str); // получили текст из строки в массив байт в кодировке 866
str = Encoding.GetEncoding(1251).GetString(b); // интерпретировали каждый байт из b в кодировке 1251 — в результате в str одни крякозяблы

Фактически, если необходимо записать строку в кодировке 1251 то это делается просто:
byte[] b = Encoding.GetEncoding(1251).GetBytes(str);

Если же надо преобразовать кодировку массива байт, то не надо предварительно преобразовывать массив в строку:
public byte[] MyDecoder( byte[] byte866 )
{
byte[] byte1251 = Encoding.Convert( Encoding.GetEncoding(866), Encoding.GetEncoding(1251), byte866 );
return byte1251;
}

Вероятно проблема не в неэффективности концепции framework .NET, а в понимании используемых технологий
Но, как мне кажется, без понимания основ эффективно писать вообще ни на чем нельзя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.