Cómo especificar la codificación, mientras archivo de proceso csv en PHP?

StackOverflow https://stackoverflow.com/questions/2048347

  •  20-09-2019
  •  | 
  •  

Pregunta

<?php
$row = 1;
$handle = fopen ("test.csv","r");
while ($data = fgetcsv ($handle, 1000, ",")) {
    $num = count ($data);
    print "<p> $num fields in line $row: <br>\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        print $data[$c] . "<br>\n";
    }
}
fclose ($handle);
?> 

Lo anterior viene del manual de php, pero no vi dónde especificar la codificación (como UTF-8 o así)

¿Fue útil?

Solución

Trate de cambiar la configuración regional.

Como se dice más adelante el ejemplo en el manual de href="http://de3.php.net/manual/en/function.fgetcsv.php" rel="nofollow diste :

  

Nota: configuración regional se tiene en cuenta por esta función. Si LANG es, por ejemplo en_US.UTF-8,   archivos en un byte de codificación se leen mal por esta función.

enfoque por el comentario en la misma página sugerida:

setlocale(LC_ALL, 'ja_JP.UTF8'); // for japanese locale

setlocale() :

  

nombres Área local se pueden encontrar en RFC 1766 y ISO 639 . Diferentes sistemas tienen   diferentes esquemas de nombramiento de los entornos. [...] En Windows, establece el setlocale(LC_ALL, '')   nombres específicos de la configuración regional / idioma del sistema (accesibles a través del Panel de Control).

Otros consejos

Una tal cosa es la aparición de la marca de orden de bytes UTF, o lista de materiales. El carácter UTF-8 para la marca de orden de bytes es U + FEFF, o más bien tres bytes - 0xEF, 0xBB y 0xBF - que se encuentra en el inicio del archivo de texto. Para UTF-16 se utiliza para indicar el orden de bytes. Para UTF-8 no es realmente necesario.

Así que hay que detectar los tres bytes y quitar la lista de materiales. A continuación se muestra un ejemplo simplificado de cómo detectar y eliminar los tres bytes.

$str = file_get_contents('file.utf8.csv');
$bom = pack("CCC", 0xef, 0xbb, 0xbf);
if (0 == strncmp($str, $bom, 3)) {
    echo "BOM detected - file is UTF-8\n";
    $str = substr($str, 3);
}

Eso es todo

intente lo siguiente:

<?php
$handle = fopen ("specialchars.csv","r");
echo '<table border="1"><tr><td>First name</td><td>Last name</td></tr><tr>';
while ($data = fgetcsv ($handle, 1000, ";")) {
        $data = array_map("utf8_encode", $data); //added
        $num = count ($data);
        for ($c=0; $c < $num; $c++) {
            // output data
            echo "<td>$data[$c]</td>";
        }
        echo "</tr><tr>";
}
?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top