2010-11-14 9 views
7

Ho ottenuto un file pieno di quei codici e voglio "tradurlo" in caratteri normali (un intero file, intendo). Come posso farlo?Ã © e altri codici

Grazie mille in anticipo.

+0

Che cosa intendi esattamente? Cosa vedi quando apri il file in un editor esadecimale? –

+0

Mi dispiace per la mia cattiva spiegazione. Voglio dire, con la funzione utf8_decode() di PHP posso mostrare il valore reale, ma ho bisogno di cambiarlo nell'intero file. Come farlo? – Matts

risposta

16

Sembra che all'inizio avessi un file UTF-8 che è stato interpretato come codifica a 8 bit (ad esempio ISO-8859-15) e codificato con entità. Dico questo perché la sequenza C3A9 sembra una bella plausibile UTF-8 encoding sequence.

Sarà necessario prima decodificare l'entità, quindi si avrà di nuovo una codifica UTF-8. Potresti quindi utilizzare qualcosa come iconv per convertire in una codifica di tua scelta.

per lavorare attraverso il tuo esempio:

  • & # xc3; & # xA9; sarebbe decodificato come la sequenza di byte 0xC3A9
  • 0xC3A9 = 11000011 10101001 in binario
  • l'iniziale 110 nel primo ottetto ci dice che questo potrebbe essere interpretato come una sequenza di due byte UTF-8. Poiché il secondo ottetto inizia con 10, stiamo guardando qualcosa che possiamo interpretare come UTF-8. Per fare questo, prendiamo gli ultimi 5 bit del primo ottetto, e gli ultimi 6 bit del secondo ottetto ...
  • Così, interpretato come UTF8 si tratta di 00.011.101 mila uno = E9 = e (LATIN SMALL LETTER E WITH ACUTE)

Hai detto di voler gestire questo con PHP, qualcosa del genere potrebbe farlo per te:

//to load from a file, use 
//$file=file_get_contents("/path/to/filename.txt"); 
//example below uses a literal string to demonstrate technique... 

$file="&Précédent is a French word"; 
$utf8=html_entity_decode($file); 
$iso8859=utf8_decode($utf8); 

//$utf8 contains "Précédent is a French word" in UTF-8 
//$iso8859 contains "Précédent is a French word" in ISO-8859 
+0

+1 ottima risposta. – Sarfraz

+0

Ma come cambiare un intero file? Voglio dire, è un file con testo "comune" e sequenze codificate ... – Matts

+0

Se questa tecnica non funziona per il tuo file, ti suggerirei di includere un piccolo dump esadecimale di un campione pertinente del tuo file. –