Enviar de ASP a Flash en Unicode
Escrito el 6/10/2003 por Sixto
Hoy en el trabajo me ha vuelto a ocurrir, preparando un pequeño código básico, nos hemos encontrado que los atributos acentuados en un XML no los recogia el Flash correctamente. Despues de darle unas vueltas, me di cuenta que erá algo tan absurdo, como que no leia correctamente el formato unicode del archivo XML, el famoso System.UseCodePage = true, parecia que se imponía como solución rápida, pero decidmos trabajar en unicode en exclusiva para aprovechar las ventajas de este formato.....
Como ya es sabido, y para el que no, lo explico, el problema de entendimiento entre las versiones de Flash posteriores a 5 y los script de servidores respecto a visualización de caracteres, es por que Macromedia apostó por el formato unicode (no sólo MM, Microsoft en el Windows Server 2003 también ha terminado por aceptarlo como estandar). Las ventajas que nos aporta este formato en nuestras aplicaciones flash (universalidad) también se traducen en problemas básicos en la recuperación de datos, y visualizarlos correctamente en nuestro proyecto de un script dinámico.
Este tema ha sido ampliamente solucionado sobre PHP mediante la función utf8_encode, pero he estado buscando por la red una solución aplicada a ASP y no ha habido manera de encontrar algo.
Hay que decir, de todas maneras que si el servidor Windows donde esta alojado el IIS no acepta unicode, en principio no tiene solución. En mi caso el servidor de producción si acepta unicode por lo que se nos ha simplificado el problema.
Todo pasa por obligar al ASP a generar el XML (o la salida que corresponda) en ese formato, la primera solución de incluir la codificación en la cabecera (<?xml version="1.0" encoding="UTF-8" ? ) no funciona exclusivamente, ya que el formato en el que está codificado realmente el texto es incorrecto. Para que todo funcione correctamente basta con añadir esta sentencia al comienzo de nuestro script:
1:<%
2:Session.CodePage = "65001"
3:%>
De esta manera, y siempre que el windows del servidor acepte unicode, conseguiremos recuperar los datos de manera trasparente y sin obligar al reproductor de flash a utilizar el juego de codificación instalado en el equipo en el que se visualiza la película (conllevaria, por ejemplo, que un americano no podría leer los textos de nuestra web al no soportar su juego de caracteres la ñ ni los acentos).
Intuyo que en los servidores en los que no esté soportado el unicode se podrá utilizar esta función, aunque es una afirmación sin pruebas realizadas, en cuanto pueda hago unas pruebas y lo compruebo pero parece que devuelve codificado en unicode el texto que se le pasa a la función.
Por otro lado, hay que saber, que si un servidor windows no acepta unicode (que ya me pasó) un archivo guardado como unicode y recuperado desde flash, no ´será devuelto de ninguna manera, o por lo menos en un servidor a mi me ocurrió.