2011-07-01 20 views
12

Bir bayt dizisi vardır: (i bir bayt dizisi dönüştürülür) 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 CEBu bayt dizisiyle neler oluyor?

O StreamReader aracılığıyla okunan işlev bana geri dönüyor aşağıdaki olsun çalıştığında 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); 
    } 
} 

kullanılarak

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

Bir şekilde bana iade edilenleri almam ve doğru kodlamaya dönmem gerekiyor ve sağ bayt dizisi, ama çok çalıştı.

Lütfen dikkat edin, WP7 sınırlı API ile çalışıyorum.

Umarım yardımcı olabilirsiniz.

Teşekkürler!

yardım için Güncelleştirme ... Ben şu kod, bu yanlıştır tek şey dışarı bölünmüş alır son byte 5 neredeyse haklı oluyor yoksa

.

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

Diziyi yazan/oluşturan kodu bize gösterir misiniz? –

+0

Nope, bir üçüncü taraf hizmetinden geliyor, bu hizmetin döndürdüğü kesin veriler ... Ayrıca, sadece ne olması gerektiğine geri dönmek istiyorum (yanıt akışında olduğu gibi) – John

+0

Ben ciddiyim bunun üzerine boggled ... – John

cevap

26

orijinal bayt dizisi UTF-8 olarak kodlanmamış olup. StreamReader bu nedenle her geçersiz baytı, U + FFFD ikame karakteri ile değiştirir. Bu karakter UTF-8'e geri kodlandığında, bu, EF BF BD bayt dizisi ile sonuçlanır. Bilgi tamamen kaybolduğundan, dizeden özgün bayt değeri oluşturamazsınız.

+0

Bundan korktuğum şey ... Bu yüzden, veriyi kaybetmemenizin tek yolu, kodlamanın ne olduğunu ve bunun gibi okunduğunu anlamak mı? Ne yazık ki, bir nedenle sadece bir bayt dizisi okuyamıyorum, Akış okumak için bir streamreader gerektirir ... – John

+0

Evet, ve şüpheniz varsa, ISO-8859-1 kullanın, böylece basit bir 1: 1 bayttan karakterlere eşleme. Sadece merak için: Neden böyle bir bayt akışını (karakter olarak açık olmayan bir veri) bir karakter akışı olarak okumak istesin? –

+0

Bir spesifikasyon için akış kaynağını soramaz mısınız? –

İlgili konular