Domanda

Sto modificando un'applicazione CGI matura scritta in Perl e la questione della codifica dei contenuti è emersa. Il browser riporta che il contenuto è codificato iso-8859-1 e l'applicazione sta dichiarando iso-8859-1 come set di caratteri nelle intestazioni HTTP ma non sembra mai effettivamente fare la codifica. Nessuna delle varie tecniche di codifica descritte nei tutorial perldoc ( Encode , Encoding , Apri ) sono utilizzati nel codice, quindi sono un po 'confuso su come il documento viene effettivamente codificato.

Come accennato, l'applicazione è abbastanza matura e probabilmente precede molti dei metodi di codifica attuali. Qualcuno sa di qualche eredità o tecniche deprecate che dovrei cercare? A quale codifica assume Perl / impostazione predefinita quando non viene fornita alcuna direzione dallo sviluppatore?

Grazie

È stato utile?

Soluzione

Per impostazione predefinita, Perl gestisce le stringhe come sequenze di byte, quindi se si legge da un file e lo si stampa su STDOUT, produrrà la stessa sequenza di byte. Se i tuoi modelli sono Latin-1, anche il tuo output sarà Latin-1.

Se usi una stringa nel contesto della stringa di testo (come con uc , lc e così via) perl assume la semantica Latin-1, a meno che la stringa non sia stata decodificata prima .

Ulteriori informazioni su Perl, set di caratteri e codifiche

Altri suggerimenti

Perl non assumerà nulla, ma il browser suppone che la codifica si basi di solito su congetture. I documenti vengono emessi direttamente, così come sono stati scritti, se non viene utilizzata nessuna delle tecniche di codifica.

È possibile specificare il set di caratteri nell'intestazione HTTP Content-Type.

Il primo posto che vorrei cercare è la configurazione del server. Se non stai impostando l'intestazione di codifica del contenuto nel programma, probabilmente stai raccogliendo l'ipotesi del server.

Esegui lo script separatamente dal server per vedere qual è il suo output effettivo. Quando il server ottiene l'output da un programma CGI (che non è nph), il server corregge l'intestazione per tutto ciò che ritiene mancante prima di inviarlo al client.

Se il browser riporta il contenuto come iso-8859-1, forse il tuo script perl non ha prodotto le intestazioni corrette per specificare il set di caratteri?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top