2011-07-01 19 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); 
    } 
} 

當該功能運行出現以下還給我 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閱讀(我轉換爲字節數組)

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。

希望你們可以幫忙。

謝謝!

更新幫助...

如果我下面的代碼,它幾乎對的,這是唯一錯誤的事情是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); 
+0

你能告訴我們寫入/創建數組的代碼嗎? –

+0

不,它來自第三方服務,這是服務返回的確切數據......此外,我只是想回到它應該是的(因爲它站在響應流中) – John

+0

我很認真在這一個難以置信... – John

回答

26

原始字節數組是編碼爲UTF-8。因此StreamReader用替換字符U + FFFD替換每個無效字節。當該字符被編碼回UTF-8時,這將導致字節序列EF BF BD。您不能從字符串構造原始字節值,因爲信息完全丟失。

+0

這就是我所害怕的......所以真正不丟失數據的唯一方法是弄清楚編碼是什麼,並且像這樣讀取?不幸的是,由於某種原因,我不能只讀一個字節數組,Stream需要一個流讀取器來讀取... – John

+0

是的,當你有疑問時,使用'ISO-8859-1',所以你會得到一個簡單的從字節到字符的1:1映射。只是爲了好奇:爲什麼有人想將這樣的字節流(顯然是非字符數據)作爲字符流讀取? –

+0

難道你不問流規範的來源嗎? –