这个字节数组怎么回事?

时间:2011-07-01 04:22:04

标签: windows-phone-7 c#-4.0 encoding bytearray

我有一个字节数组: 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

不知何故,我需要回到我身边并将其恢复为正确的编码和正确的字节数组,但我已经尝试了很多。

请注意,我正在使用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);

1 个答案:

答案 0 :(得分:26)

原始字节数组编码为UTF-8。因此,StreamReader用替换字符U + FFFD替换每个无效字节。当该字符被编码回UTF-8时,这将导致字节序列EF BF BD。您无法从字符串构造原始字节值,因为信息完全丢失。