parece que el conjunto de herramientas de plantillas no está manejando la codificación correctamente.Codificación de caracteres del kit de herramientas de plantillas
Estoy pasando template->process
un nombre de archivo (donde obtener la plantilla), una referencia hash (que contiene todos los parámetros), y una referencia escalar (dónde poner la salida) luego la devuelvo y, a su vez, la visualizo el usuario.
Cuando le doy una cadena con diéresis, la salida html incluye un diamante negro con un signo de interrogación blanco en lugar de cada letra (pero el número correcto de letras). Cualquier otro personaje sale bien.
Estoy usando una advertencia para imprimir la cadena antes de hacer la llamada a la plantilla-> proceso y en este punto está bien, por lo que puedo decir es durante la llamada template->process
que las cosas se convierten en basura.
¿Alguna idea? He intentado usar ENCODING => "utf8"
así como binmode => ":utf8"
pero ninguno tiene ningún efecto en la salida.
Aquí está mi código con algo de la grasa recortada solo para mostrar mi llamada a la plantilla-> proceso, tenga en cuenta que si dejo fuera el {binmode => 'utf8'}
no tiene ningún efecto.
<put variables in hash referenced to by vars>
<print out variables in has referenced to by $var>
my $data;
$template->process($self->filename, $vars, \$data, {binmode => ':utf8'}) || die "Template process failed: ", $template->error();
return $data;
RESUELTO Hey todo gracias por sus respuestas, el problema resultó ser que después proceso de plantilla había hecho su cosa, entonces escribimos la cadena en un archivo temporal antes de darle salida por lo que también necesario para establecer binmode para el archivo, el código ahora se ve así:
<put variables in hash referenced to by vars>
<print out variables in has referenced to by $var>
my $data;
binmode(STDOUT, ":utf8");
$template->process($self->filename, $vars, \$data, {binmode => ':utf8'}) || die "Template process failed: ", $template->error();
return $data;
gracias a todos por su tiempo :)
Probablemente no está relacionado, por intentar pasar UTF-8 en lugar de utf8. A veces es importante, por ejemplo, http://jeremy.zawodny.com/blog/archives/010546.html – Hugmeir
¿Se está mutilando el texto UTF-8 o el navegador simplemente no está recogiendo la codificación correcta? –
Si fuera el último, ¿cómo podría decirle al navegador qué codificación usar? Usando HTML template pro (el sistema desde el que nos movemos) los caracteres se muestran correctamente. Esto me llevó a creer que era TT, pero podría estar equivocado. Ahora en el tren, tendré que probar cualquier sugerencia mañana por la mañana. – cjh