2011-07-01 24 views
12

私はバイト配列があります。このバイト配列はどうなっていますか?

(私はバイト配列に変換)、その関数を実行すると、私は次のように私に戻って取得 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); 
    } 
} 

を使用してStreamReaderを介して読み出される 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

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

何とか私は返されたものを私に返して、正しいエンコーディングに戻す必要がありますそして右のバイト配列ですが、私はたくさん試しました。

私はWP7限定APIを使用しています。

うまくいけば、皆さんお手伝いできます。

ありがとうございます!

ヘルプの更新...私は次のコードは、それは、間違っている唯一のものが出て分割します最後のバイトまで第五はほとんど右でいない場合

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

アレイの書き込み/作成中のコードを表示できますか? –

+0

いいえ、それはサードパーティのサービスから来ています、それはサービスが返す正確なデータです...さらに、私はちょうどそれが(それが応答ストリームに立っているように)であるものに戻って取得したいです – John

+0

私は真剣ですこの1つに悩まされた... – John

答えて

26

元のバイト配列は、UTF-8としてエンコードないあります。したがって、StreamReaderは各無効バイトを置換文字U + FFFDで置き換えます。その文字がUTF-8にエンコードされると、バイトシーケンスEF BF BDになります。情報が完全に失われているため、文字列から元のバイト値を構築することはできません。

+0

これは私が恐れていたことです...実際にデータを失わない唯一の方法は、エンコーディングが何であるかを理解しているようなものです。残念ながら、何らかの理由で私はバイト配列を読み込むことはできません。Streamはストリームリーダーに読み込みを要求します。 – John

+0

疑問がある場合は、 'ISO-8859-1'を使用してください。バイトから文字への1:1マッピング。好奇心のために:なぜ誰かがこのようなバイトストリーム(文字以外のデータです)を文字ストリームとして読みたいのですか? –

+0

ストリームのソースに仕様を尋ねることはできませんか? –

関連する問題