Обнаружение кодировки символов запроса HTTP POST
Я создаю веб-службу и node, которая принимает POST для создания нового ресурса. Ресурс ожидает один из двух типов контента - формат XML, который я буду определять, или переменные формы.
Идея заключается в том, что потребляющие приложения могут напрямую обрабатывать XML-сообщения POST и получать более эффективную проверку и т.д., но также есть интерфейс HTML, который будет POST в кодированном виде. Очевидно, что формат XML имеет объявление charset, но я не вижу, как я обнаруживаю форму 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? В противном случае мне придется попробовать и угадать набор символов, основанный на том, какие символы присутствуют, и это всегда немного зависит от того, что я могу сказать.
Ответы
Ответ 1
стандартная кодировка 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
Ответ 2
Кодировка, используемая в POST, будет соответствовать кодировке Charset, указанной в HTML-хостинге формы. Следовательно, если ваша форма отправляется с использованием кодировки UTF-8, которая является кодировкой, используемой для опубликованного контента. Кодировка URL применяется после преобразования значений в набор октетов для кодировки символов.
Ответ 3
Попробуйте установить кодировку на вашем Content-Type:
httpCon.setRequestProperty( "Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + boundary );