Utilizzando la funzione PHP 5.3 fgetcsv
, sto riscontrando alcuni problemi dovuti a problemi di codifica. Si noti che quel file ha caratteri latini "speciali" spagnoli come accenti grafici á, é, í ï, ecc ...php fgetcsv - problemi di codifica del charset
Ottengo il file CSV esportando alcuni dati strutturati che ho in un file MS 2008 per Mac Excel.
Se lo apro con l'applicazione Mac OS X TextEdit
, tutto sembra perfetto.
Ma quando arrivo al mio programma PHP e provo a leggere il CSV usando quella funzione PHP fgetcsv, non riesco a leggere correttamente il charset.
/**
* @Route("/cvsLoad", name="_csv_load")
* @Template()
*/
public function cvsLoadAction(){
//setlocale(LC_ALL, 'es_ES.UTF-8');
$reader = new Reader($this->get('kernel')->getRootDir().'/../web/uploads/documents/question_images/2/41/masiva.csv');
$i = 1;
$r = array("hhh" => $reader -> getAll());
return new Response(json_encode($r, 200));
}
Come potete vedere, ho cercato anche di utilizzare un setlocale
-es_ES.UTF-8
. Ma niente lo fa funzionare.
La parte lettura viene qui:
public function getRow()
{
if (($row = fgetcsv($this->_handle, 10000, $this->_delimiter)) !== false) {
$this->_line++;
return $this->_headers ? array_combine($this->_headers, $row) : $row;
} else {
return false;
}
}
Vedi quello che ho nella variabile $ fila dopo ogni lettura consecutive:
Quei ?
personaggi si suppone siano le vocali con grafica accenti su di loro.
Qualsiasi indizio laggiù? Funzionerebbe se avessi usato MS Excel per Windows? Come posso sapere in tempo di esecuzione la codifica esatta del file e impostarlo prima di leggerlo?
(Per coloro che parlano spagnolo, non spaventarti con cose mediche così terribili in quei testi;)).
stesso problema. Un file CSV con codifica UTF8 importa bene su un server ma non sull'altro. Finito per scrivere il mio lettore CSV. –
FWIW, non puoi davvero * sapere * la codifica di un file senza che ti venga detto. Puoi indovinare quando lo leggi e lo converti di conseguenza, ma nulla è affidabile quanto la codifica. – cmbuckley
Grazie cbuckley. Cosa intendi con "convertire di conseguenza", come cercare di indovinarlo e chiedere all'utente se approva l'importazione? E se no, continua a provare altre codifiche per l'origine? – ElPiter