Posts Tagged unicode
System.useCodePage, por que não usar?
Posted by Renato Pacheco in ActionScript 3, Flash, Flex on 10 de setembro de 2009
Em muitos projetos com o Flash passamos por uma inseparável questão dos caracteres especias que são um tormento para muitos desenvolvedores que em um momento de desespero recorrem ao System.useCodePage, fazendo assim:
System.useCodePage = true;
Que bom, de repente seu problemas acabaram, todos aqueles caracteres começaram a funciona, mas que comando maravilhoso é esse? Vamos ver o que a Adobe nos diz.
Um valor Booleano que determina qual a página de código a ser usada para interpretar arquivos de texto externos. Quando a propriedade for definida como false, os arquivos de texto externos serão interpretados como Unicode. (Esses arquivos devem ser codificados como Unicode quando você os salva). Quando a propriedade está definida como true, os arquivos de texto externos são interpretados usando a página de código tradicional do sistema operacional que executa o aplicativo. O valor padrão de useCodePage é false.
O texto carregado como arquivo externo (usando a classe Loader.load(), URLLoader ou URLStream) deve ter sido salvo como Unicode para que o aplicativo o reconheça como Unicode. Para codificar arquivos externos como Unicode, salve-os em um aplicativo que ofereça suporte a Unicode, como Bloco de notas do Windows.
Resumindo a história, desde que você mantenha o valor de System.useCodePage como false, o Flash irá interpretar os dados recebido como Unicode, mas também significa que eles serão enviados as páginas dos servidores também como Unicode.
Unicode: é um padrão universal que permite aos computadores representar e manipular de forma consistente praticamente qualquer sistema de escrita que exista.
Então, uma vez que você carrega um arquivo externo que não esteja em Unicode e aparecem aqueles caracteres malucos você corre para mudar o System.useCodePage para true. Vamos ver agora o que a adobe diz sobre isso.
Quando esse código está presente, o aplicativo interpreta o texto externo usando a página de código tradicional do sistema operacional que executa o sistema operacional. Geralmente, é CP1252 em um sistema operacional Windows em inglês e Shift-JIS em um sistema operacional japonês. Se você definir useCodePage como true, o Flash Player 6 e superior tratarão o texto como o Flash Player 5 o trata. (O Flash Player 5 tratava todos os textos como se estivessem na página de código tradicional do sistema operacional que executava o player).
Quer dizer, seu problema se resolve por que apartir deste momento os textos serão interpretados de acordo dom o sistema operacional que estiver executando o SWF e não mais usando a codificação universal.
Acontece que seu cliente comprou um notebook direto dos Estados Unidos, ou pior ele é Chinês e você vai apresentar seu site pra ele, ai eu te pergunto:
O sistema operacional dele tem os nossos caracteres? Você acha mesmo que ele vai poder ver todos aqueles acentos maravilhosos? Os dados que você vai carregar estão no formato que você precisa?
Então eu recomendo, se você realmente quer que o máximo possíveis de pessoas possam usar perfeitamente o seu site, procure usar o System.useCodePage com valor padrão false.
Por isso, se necessário, procure tratar os dados enviados ou recebidos pelo Flash antes de mudar o tipo de codificação que ele irá trabalhar.