Получение почтовых данных с разными кодировками - PullRequest
3 голосов
/ 29 апреля 2011

Я пытаюсь интегрироваться со сторонней системой, и в документации упоминается, что когда они отправляют данные XML через HttpPost, они иногда используют " text / xml charset = \" UTF-8 ** "" для "Content-Type", а в других случаях они используют "** application / x-www.form-urlencoded " в качестве Content-Type.

Будут ли какие-либо различия в разборе запроса? Прямо сейчас я просто извлекаю данные поста, используя следующий код:

 StreamReader reader = new StreamReader(Request.InputStream);

        String xmlData = reader.ReadToEnd();

Ответы [ 4 ]

5 голосов
/ 29 апреля 2011

Когда вы открываете потоковое читатель, вы должны передать кодировку, указанную в объекте HttpRequest.

StreamReader reader = new StreamReader(request.InputStream, request.ContentEncoding);
string xmlData = reader.ReadToEnd();

Это должно позволить вам получить исходное содержимое запроса в правильную строку .NET независимо от того,какая бы кодировка не использовалась.

1 голос
/ 29 апреля 2011

Вы можете передать кодировку вашему StreamReader при построении следующим образом:

  StreamReader s = new StreamReader(new FileStream(FILE), Encoding.UTF8);
1 голос
/ 29 апреля 2011

Всегда отдавайте предпочтение использованию Encoding.UTF8.Это гарантирует, что в большинстве случаев чтение всегда выполняется в правильном стандарте кодирования.

StreamReader sr = new StreamReader(Request.InputStream, Encoding.UTF8);

Надеюсь, это поможет.

0 голосов
/ 29 апреля 2011

application/x-www.form-urlencoded - это Данные формы HTTP , , а не XML.

Ваш код, скорее всего, потерпит неудачу, если вы ожидаете, что Request.InputStream будет разборной XML-строкой, когда Content-Type равен application/x-www.form-urlencoded

...