3

次のような CSV ファイルを読み取る短いスクリプトがあります。

$csv = new SplFileObject($pathToFile, 'r');

while (!$csv->eof() && ($row = $csv->fgetcsv()) && $row[0] !== null) {
    var_dump($row);
}

これは問題なく動作しますが、一部の非標準文字に問題があります。CSV にはドイツ語の単語がいくつかありますが、私の特定の問題は、ウムラウトが難しいことです。出力される行のタイプの例は次のとおりです。

array(5) {
    [0]=>
        string(6) "J¦rgen"
    [1]=>
        string(8) "Lastname"
    [2]=>
        string(14) "name@domain.de"
    [3]=>
        string(7) "Example"
    [4]=>
        string(7) "Example"
}

Jürgenのüは¦文字に置き換えられます。

前に次のコードを入れてみました:

mb_internal_encoding('UTF-8');

しかし、それは効果がありませんでした。

Vi で csv ファイルを開くと ü が正常に表示されるので、ファイルはサーバー上で正しいです。

CSVを解析するときにPHPがドイツ語の文字をうまく処理する方法を教えてもらえますか?

4

1 に答える 1

2

示されているコード自体は機能するはずです。この問題は、CSV ファイルの文字エンコードが原因であると思われますが、utf-8. 入力ファイルのエンコーディングを調べる必要があります。

それがわかったらutf-8、コマンドを使用してファイルを変換できますiconv。(コメントで、入力エンコーディングは であると述べましたiso-8859-1)。

例:

iconv -f 'iso-8859-1' -t 'utf-8' input.csv > utf8.csv

注意!次のようにファイルを直接オーバーライドしようとしないでください。

iconv -f 'iso-8859-1' -t 'utf-8' data.csv > data.csv

これにより、data.csv が上書き (切り捨て) され、データが完全に失われます。これは、シェルがコマンド自体を実行する前に出力ファイルを作成して切り捨てるためです。

于 2014-07-03T15:05:08.520 に答える