14

PHP 5.3fgetcsv関数を使用すると、エンコーディングの問題によりいくつかの問題が発生します。このファイルには、グラフィックアクセントá、é、íïなどのスペイン語の「特別な」ラテン文字が含まれていることに注意してください。

MS 2008 forMacExcelファイルにある構造化データをエクスポートするCSVファイルを取得します。

Mac OS XTextEditアプリケーションで開くと、すべてが完璧になっているようです。

しかし、PHPプログラムにアクセスして、そのfgetcsv PHP関数を使用してCSVを読み取ろうとすると、文字セットが正しく読み取られません。

/**
 * @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));
}

ご覧のとおり、setlocaletoも使ってみましたes_ES.UTF-8。しかし、それを機能させるものは何もありません。

読む部分はここにあります:

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;
    }
}

各行を読み取った後、$row変数に何が表示されるかを確認してください。

ここに画像の説明を入力してください

これらの?文字は、グラフィックのアクセントが付いた母音であると想定されています。

あそこに何か手がかりはありますか?MS Excel for Windowsを使用した場合、機能しますか?実行時にファイルの正確なエンコーディングを知り、それを読み取る前に設定するにはどうすればよいですか?

(それらのスペイン語話者にとって、それらのテキストのそのようなひどい医療のものに恐れをなさないでください;))。

4

2 に答える 2

38

これを試して:

function convert( $str ) {
    return iconv( "Windows-1252", "UTF-8", $str );
}

public function getRow()
{
    if (($row = fgetcsv($this->_handle, 10000, $this->_delimiter)) !== false) {
        $row = array_map( "convert", $row );
        $this->_line++;
        return $this->_headers ? array_combine($this->_headers, $row) : $row;
    } else {
        return false;
    }
}
于 2012-11-08T21:53:18.223 に答える
0

これは、保存時にExcelがファイルをエンコードする方法に関係している可能性があります。

.xlsファイルをGoogleドキュメントにアップロードし、.csvとしてダウンロードしてみてください

于 2012-11-08T21:46:32.563 に答える