Обнаружение кодировки символов запроса HTTP POST - PullRequest
49 голосов
/ 02 апреля 2009

Я создаю веб-сервис и у меня есть узел, который принимает POST для создания нового ресурса. Ресурс ожидает один из двух типов контента - формат XML, который я буду определять, или переменные в кодированной форме.

Идея состоит в том, что приложения-потребители могут напрямую POST XML и получают выгоду от лучшей проверки и т. Д., Но есть также HTML-интерфейс, который будет POST-кодирование форм. Очевидно, что формат XML имеет декларацию charset, но я не вижу, как определить кодировку формы, просто глядя на POST.

Типичный пост в форме от Firefox выглядит так:

POST /path HTTP/1.1
Host: www.myhostname.com
User-Agent: Mozilla/5.0 [...etc...]
Accept: text/html,application/xhtml+xml, [...etc...]
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 41

field1=value1&field2=value2&field3=value3

Который, кажется, не содержит каких-либо полезных указаний для набора символов.

Из того, что я вижу, тип application / x-www-form-urlencoded полностью определен в HTML, который просто излагает правила% -encoding, но ничего не говорит о том, в какой кодировке должны находиться данные .

В принципе, есть ли способ сообщить набор символов, если я не знаю, какой набор символов был изначально представлен HTML? В противном случае мне придется попытаться угадать набор символов, основываясь на том, какие символы присутствуют, и это всегда немного неверно из того, что я могу сказать.

Ответы [ 3 ]

60 голосов
/ 02 апреля 2009

кодировка HTTP POST по умолчанию - ISO-8859-1.

иначе вы должны посмотреть на заголовок Content-Type, который будет выглядеть как

Content-Type: application/x-www-form-urlencoded ; charset=UTF-8

Вы можете объявить свою форму с помощью

<form enctype="application/x-www-form-urlencoded;charset=UTF-8">

или

<form accept-charset="UTF-8">

для принудительного кодирования.

Некоторые ссылки:

http://www.htmlhelp.com/reference/html40/forms/form.html

http://www.w3schools.com/tags/tag_form.asp

11 голосов
/ 02 апреля 2009

Charset, используемый в POST, будет соответствовать Charset, указанному в HTML-коде, на котором размещена форма. Следовательно, если ваша форма отправляется с использованием кодировки UTF-8, то есть кодировки, используемой для размещенного контента. Кодировка URL применяется после преобразования значений в набор октетов для кодировки символов.

1 голос
/ 28 февраля 2012

Попробуйте установить кодировку для вашего Content-Type:

httpCon.setRequestProperty( "Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + boundary );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...