Estoy construyendo un servicio web y tengo un nodo que acepta una POST para crear un nuevo recurso. El recurso espera uno de dos tipos de contenido: un formato XML que definiré o variables codificadas por formulario.Detectando la codificación de caracteres de una solicitud HTTP POST
La idea es que las aplicaciones que consumen pueden PUBLICAR XML directamente y beneficiarse de una mejor validación, etc., pero también hay una interfaz HTML que PUBLICARÁ el material codificado en el formulario. Obviamente, el formato XML tiene una declaración de juego de caracteres, pero no puedo ver cómo detecto el conjunto de caracteres del formulario simplemente al mirar el POST.
Un puesto típica de la forma de Firefox tiene el siguiente aspecto:
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
que no parece contener ninguna indicación útil del conjunto de caracteres.
Según lo que puedo ver, el tipo aplicación/x-www-form-urlencoded está completamente definido en HTML, que solo establece las reglas de codificación%, pero no dice nada sobre qué conjunto de caracteres deberían ser los datos en.
Básicamente, ¿hay alguna forma de decirle al juego de caracteres si no conozco el conjunto de caracteres que el HTML presentado originalmente tenía? De lo contrario, tendré que tratar de adivinar el juego de caracteres en función de qué caracteres están presentes, y eso siempre es un poco dudoso por lo que puedo decir.
Hay muchas sutilezas aquí y el comportamiento, variará en función del navegador y operativo sistema. Una convención utilizada por IE es que si tiene una ENTRADA oculta con el nombre '_charset_', IE rellenará ese campo con el conjunto de caracteres que utilizó al enviar el formulario. Ver también la pregunta relacionada http://stackoverflow.com/questions/12830546/accept-charset-utf-8-parameter-doesnt-do-anything-when-used-in-form – EricLaw