2011-07-01 18 views
12

Mam tablicę bajtów: 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 CECo dzieje się z tą tablicą bajtów?

jest czytana przez StreamReader korzystając 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); 
    } 
} 

Kiedy funkcja ta uruchamia się następujący wrócił do mnie (i konwertowane do tablicy bajtów)

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

W jakiś sposób muszę zabrać to, co mi zostało i przywrócić do właściwego kodowania i prawej tablicy bajtów, ale próbowałem dużo.

Należy pamiętać, że pracuję z ograniczonym API WP7.

Mam nadzieję, że możecie pomóc.

Dzięki!

Aktualizacja pomoc ...

jeśli ja poniższy kod, to prawie rację, jedyną rzeczą, która jest źle jest 5 do ostatniego bajta zostanie podzielona na zewnątrz.

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); 
+0

Czy możesz pokazać kod, który tworzy/tworzy tablicę? –

+0

Nie, jest to połączenie z usługą innej firmy, to dokładne dane, które usługa zwraca ... Poza tym, chcę tylko przywrócić to, co powinno być (jak to się dzieje w strumieniu odpowiedzi) – John

+0

Jestem poważnie zadziwił się tym ... – John

Odpowiedz

26

oryginalnej tablicy bajt nie kodowane jako UTF-8. Dlatego StreamReader zamienia każdy bajt unieważniony na znak zastępczy U + FFFD. Kiedy ta postać zostanie zakodowana z powrotem do UTF-8, skutkuje to sekwencją bajtów EF BF BD. Nie można skonstruować oryginalnej wartości bajtowej z ciągu, ponieważ informacja jest całkowicie utracona.

+0

Tego właśnie się bałem ... Więc jedynym sposobem, aby naprawdę nie stracić danych, jest dowiedzieć się, co to jest kodowanie i jak czytać? Niestety, z jakiegoś powodu nie mogę po prostu odczytać tablicy bajtów, Stream wymaga readreadera do odczytu ... – John

+0

Tak, a kiedy masz wątpliwości, użyj 'ISO-8859-1', więc otrzymasz prosty Mapowanie 1: 1 od bajtów do znaków. Tylko dla ciekawości: dlaczego ktokolwiek chciałby czytać strumień bajtów w ten sposób (co jest oczywiście danymi nie będącymi znakami) jako strumień znaków? –

+0

Nie możesz zapytać źródła strumienia o specyfikację? –

Powiązane problemy