Pergunta

Eu estou modificando uma aplicação CGI maduro escrito em Perl e a questão da codificação de conteúdo surgiu. Os relatórios do navegador que o conteúdo é iso-8859-1 codificado ea aplicação está declarando iso-8859-1 como o charset no cabeçalhos HTTP, mas não parece sempre realmente fazer a codificação. Nenhuma das várias técnicas de codificação descritos nos cursos Perldoc ( Codificar , codificação , Open ) são utilizados no código por isso estou um pouco confuso a respeito de como o documento está realmente a ser codificado.

Como mencionado, a aplicação é bastante maduro e prováveis ??antecede muitos dos métodos de codificação atuais. Alguém sabe de qualquer legado ou técnicas obsoletas eu deveria estar procurando? Para qual codificação não Perl assume / default quando nenhuma direção é fornecido pelo desenvolvedor?

Graças

Foi útil?

Solução

Por padrão Perl trata seqüências como seqüências de bytes sendo, por isso, se você ler a partir de um arquivo e impressão que a STDOUT, que irá produzir a mesma seqüência de byte. Se os seus modelos são latino-1, sua saída também será Latin-1.

Se você usar uma corda em um contexto string de texto (como com uc, lc e assim por diante) perl assume LATIN-1 semântica, a menos que a corda foi decodificado antes.

Mais sobre Perl, charsets e codificações

Outras dicas

Perl não assumirá qualquer coisa, mas o navegador está assumindo que a codificação baseado geralmente em conjecturas. Os documentos são emitidos diretamente, assim como eles foram escritos, se nenhuma das técnicas de codificação é usado.

Você pode especificar o charset no cabeçalho HTTP Content-Type.

O primeiro lugar que eu olhar é a configuração do servidor. Se você não está definindo o cabeçalho Content-Encoding no programa, é provável que você pegar palpite do servidor.

Execute o script separado do servidor para ver o que sua saída é real. Quando o servidor recebe a saída de um programa CGI (que não é nph), as correções de servidores até o cabeçalho para qualquer coisa que ele pensa está faltando antes que ele envia para o cliente.

Se o navegador relata o conteúdo como iso-8859-1, talvez o seu script perl não saída dos cabeçalhos corretos para especificar o charset?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top