WP7: Кодировка.По умолчанию

Я пытаюсь получить результаты от SO API в приложении WP7. Мне удалось заставить его работать в консольном приложении, когда я использовал следующий код

static void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            Console.Clear();
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(RootObject));
            var stream = new MemoryStream(Encoding.Default.GetBytes(e.Result));
            var gzstream = new GZipInputStream(stream);

            RootObject qs = ser.ReadObject(gzstream) as RootObject;

            foreach (Question q in qs.questions)
            {
                Console.WriteLine(q.title);
            }

        }

важной частью было Encoding.Default. Если бы я выбрал что-нибудь еще, он бы вернулся с заголовком Error GZIP, первый магический байт не совпадает» или что-то подобное.

В WP7 нет по умолчанию, есть только Unicode и UTF8, которые ни один из них не работает.

Идеи?


person Dustin Davis    schedule 17.05.2011    source источник


Ответы (2)


Не используйте WebClient.DownloadString, используйте DownloadData. Таким образом, вы получите байты в кодировке GZip (которые на самом деле не могут быть преобразованы в строку), и вы можете передать их непосредственно в GZupInputStream.

person carlosfigueira    schedule 17.05.2011
comment
потому что в WP7 Webclient нет DownloadData, только DownloadString - person Dustin Davis; 18.05.2011
comment
Упс, ты прав. Для этого вы можете использовать WebClient.OpenReadAsync. Он доступен на WP7. - person carlosfigueira; 18.05.2011
comment
Спасибо, надо будет попробовать в следующий раз. На данный момент мне удалось заставить @Titan2782 работать. - person Dustin Davis; 18.05.2011

вместо этого используйте WebRequest.BeginGetResponse. Таким образом, вы можете получить байты, как предложил @carlosfigueria, но, поскольку веб-клиент имеет только строку getstring, это обходной путь.

person Dustin Davis    schedule 17.05.2011