Pregunta

Estoy modificando una aplicación CGI madura escrita en Perl y ha surgido la cuestión de la codificación de contenido. El navegador informa que el contenido está codificado en iso-8859-1 y la aplicación está declarando iso-8859-1 como el conjunto de caracteres en los encabezados HTTP, pero parece que en realidad no hace la codificación. Ninguna de las diversas técnicas de codificación descritas en los tutoriales perldoc ( Encode , Encoding , Abrir ) se usa en el código, por lo que estoy un poco confundido en cuanto a cómo se está codificando realmente el documento.

Como se mencionó, la aplicación es bastante madura y es probable que sea anterior a muchos de los métodos de codificación actuales. ¿Alguien sabe de alguna técnica heredada o obsoleta que debería estar buscando? ¿A qué codificación asume Perl por defecto cuando el desarrollador no proporciona ninguna dirección?

Gracias

¿Fue útil?

Solución

Por defecto, Perl maneja las cadenas como si fueran secuencias de bytes, por lo tanto, si lee un archivo e imprime esto en STDOUT, producirá la misma secuencia de bytes. Si sus plantillas son Latin-1, su salida también será Latin-1.

Si usa una cadena en el contexto de la cadena de texto (como con uc , lc y así sucesivamente) perl asume la semántica de Latin-1, a menos que la cadena haya sido decodificada antes .

Más información sobre Perl, conjuntos de caracteres y codificaciones

Otros consejos

Perl no asumirá nada, pero el navegador asume que la codificación se basa generalmente en conjeturas. Los documentos se imprimen directamente, tal como se escribieron, si no se utiliza ninguna de las técnicas de codificación.

Puede especificar el conjunto de caracteres en el encabezado HTTP Content-Type.

El primer lugar que buscaría es la configuración del servidor. Si no está configurando el encabezado de codificación de contenido en el programa, es probable que esté tomando las conjeturas del servidor.

Ejecute el script por separado del servidor para ver cuál es su salida real. Cuando el servidor obtiene la salida de un programa CGI (que no es nph), el servidor corrige el encabezado de todo lo que cree que falta antes de enviarlo al cliente.

Si el navegador informa el contenido como iso-8859-1, ¿tal vez su script de perl no generó los encabezados correctos para especificar el conjunto de caracteres?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top