Url закодированные символы, ViewState и массивы byte [] - PullRequest
0 голосов
/ 09 сентября 2010

Я пытаюсь собрать скребок для экрана и постоянно получаю некорректные сообщения о состоянии просмотра.Похоже, что во время загрузки данных System.Net.WebClient или вызова System.Text.UTF8Encoding.Default.GetString для преобразования байтового массива, возвращенного вызовом WebClient DownloadData, в строку - строки, соответствующие кодам символов URL-адресов, преобразуются..

т.е.

Строки символов в кодировке URL, такие как% 2B, преобразуются в обычные символы (+ для% 2B).

Это происходит в классе WebClient?Это способ преобразования байтового массива в строку?

РЕДАКТИРОВАТЬ:

На основе предложений я попытался перейти к вызову DownloadString из класса WebClient, и в результате строка преобразовала символкодирует конкретный символ, поэтому кажется, что виновником является WebClient.

EDIT 2:

Решено.Сделав вызов System.Web.HttpUtility.UrlEncode, я смог преобразовать + обратно в% 2B перед отправкой строки состояния представления обратно на сервер при последующих запросах.Я все еще в растерянности относительно того, где и почему возникла проблема, но сервер ожидал строку состояния представления, которая содержала ...% 2B ... и получал ... + ... и определял состояние представления как недопустимоеи бросить исключение.Слава Джону и Хенку за то, что они заставили меня переосмыслить свои предположения.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2010

Если вы используете System.Text.UTF8Encoding.Default, то вы не используете UTF-8 - вы используете кодировку по умолчанию для системы. Это эквивалентно Encoding.Default, но в более запутанной форме. Используйте Encoding.UTF8, чтобы получить кодировку UTF-8 ... или используйте WebClient.DownloadString, как предложил Хенк.

С другой стороны, не ясно, что вы пытаетесь загрузить. Если вы пытаетесь загрузить двоичные данные , то вам вообще не следует пытаться преобразовать их в строку.

Было бы полезно, если бы вы прояснили свой вопрос - попробуйте представить гораздо больше контекста о том, что делает запросы, что имеет проблемы и т. Д.

1 голос
/ 09 сентября 2010

А что случилось, если вы просто используете WebClient.DownloadString() вместо открытия двоичного потока?

...