Подтвердить что ты не робот

Что происходит с этим байтовым массивом?

У меня есть массив байтов: 00 01 00 00 00 12 81 00 00 01 00 C8 00 00 00 00 00 08 5C 9F 4F A5 09 45 D4 CE

Он читается через StreamReader, используя UTF8 encoding

// Note I can't change this code, to many component dependent on it.
using (StreamReader streamReader = 
    new StreamReader(responseStream, Encoding.UTF8, false))
{
    string streamData = streamReader.ReadToEnd();
    if (requestData.Callback != null)
    {
        requestData.Callback(response, streamData);
    }
}

Когда эта функция запускается, я получаю возвращаемое мне значение (я преобразован в массив байтов)

00 01 00 00 00 12 EF BF BD 00 00 01 00 EF BF BD 00 00 00 00 00 08 5C EF BF BD 4F EF BF BD 09 45 EF BF BD

Как-то мне нужно взять что-то, возвращенное мне, и вернуть его в правильную кодировку и в правый байт-массив, но я пробовал много.

Обратите внимание, что я работаю с ограниченным API WP7.

Надеюсь, вы, ребята, можете помочь.

Спасибо!

Обновить для справки...

если я делаю следующий код, он почти прав, единственное, что неверно, - это откат от 5-го до последнего байта.

byte[] writeBuf1 = System.Text.Encoding.UTF8.GetBytes(data);
                    string buf1string = System.Text.Encoding.BigEndianUnicode.GetString(writeBuf1, 0, writeBuf1.Length);
                    byte[] writeBuf = System.Text.Encoding.BigEndianUnicode.GetBytes(buf1string);
4b9b3361

Ответ 1

Исходный массив байтов не кодируется как UTF-8. Поэтому StreamReader заменяет каждый недопустимый байт символом замены U + FFFD. Когда этот символ получает кодировку обратно в UTF-8, это приводит к последовательности байтов EF BF BD. Вы не можете построить исходное значение байта из строки, потому что информация полностью потеряна.