Question Que se passe-t-il avec ce tableau d'octets?


J'ai un tableau d'octets: 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

Il est lu via StreamReader en utilisant 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);
    }
}

Lorsque cette fonction est exécutée, les informations suivantes me sont retournées (j'ai converti en un tableau d'octets)

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

D'une manière ou d'une autre, j'ai besoin de prendre ce qui m'a été retourné et de le ramener au bon encodage et au bon tableau d'octets, mais j'ai essayé beaucoup.

S'il vous plaît soyez conscient, je travaille avec WP7 API limitée.

J'espère que vous pouvez aider les gars.

Merci!

Mise à jour de l'aide ...

Si je fais le code suivant, c'est presque correct, la seule chose qui ne va pas, c'est que le cinquième octet est divisé.

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

12
2017-07-01 04:22


origine


Réponses:


Le tableau d'octets d'origine est ne pas encodé en UTF-8. Le StreamReader remplace donc chaque octet non valide par le caractère de remplacement U + FFFD. Lorsque ce caractère est encodé en UTF-8, il en résulte une séquence d'octets EF BF BD. Vous ne pouvez pas construire la valeur d'octet d'origine à partir de la chaîne car les informations sont complètement perdues.


26
2017-07-01 06:05