Question

Je modifie une application CGI mature écrite en Perl et la question de l'encodage du contenu a été soulevée. Le navigateur indique que le contenu est codé en iso-8859-1 et que l'application déclare iso-8859-1 en tant que jeu de caractères dans les en-têtes HTTP, mais ne semble pas effectuer réellement le codage. Aucune des différentes techniques d'encodage décrites dans les didacticiels perldoc ( Encoder , Encodage , Ouvrir ) sont utilisés dans le code, je suis donc un peu confus quant à la manière dont le document est réellement encodé.

Comme mentionné précédemment, l’application est assez mature et est probablement antérieure à la plupart des méthodes de codage actuelles. Est-ce que quelqu'un connaît des techniques héritées ou obsolètes que je devrais rechercher? À quel encodage Perl assume-t-il / default si aucune direction n’est fournie par le développeur?

Merci

Était-ce utile?

La solution

Par défaut, Perl traite les chaînes en tant que séquences d'octets. Ainsi, si vous lisez un fichier et que vous l'imprimez dans STDOUT, il produira la même séquence d'octets. Si vos modèles sont en latin-1, votre sortie sera également en latin-1.

Si vous utilisez une chaîne dans un contexte de chaîne de texte (comme avec uc , lc , etc.), perl utilise la sémantique Latin-1, à moins que la chaîne n'ait été décodée auparavant. .

Plus d'informations sur Perl, les jeux de caractères et les encodages

Autres conseils

Perl n’assumera rien, mais le navigateur suppose que l’encodage est généralement basé sur des conjectures. Les documents sont directement sortis, tels qu'ils ont été écrits, si aucune des techniques de codage n’est utilisée.

Vous pouvez spécifier le jeu de caractères dans l'en-tête HTTP Content-Type.

Le premier endroit que je regarderais est la configuration du serveur. Si vous ne définissez pas l'en-tête de codage du contenu dans le programme, vous êtes probablement tenté par le serveur.

Exécutez le script séparément du serveur pour voir quelle est sa sortie réelle. Lorsque le serveur obtient la sortie d'un programme CGI (ce n'est pas nph), le serveur corrige l'en-tête pour tout ce qui lui manque, avant de l'envoyer au client.

Si le navigateur indique que le contenu est iso-8859-1, votre script Perl n'a peut-être pas généré les en-têtes corrects pour spécifier le jeu de caractères?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top