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 文件显示 ü 成功,因此文件在服务器上是正确的。

谁能建议 PHP 在解析 CSV 时如何成功处理德语字符?

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 并导致数据完全丢失。这是因为 shell 在执行命令之前会创建并截断输出文件。

于 2014-07-03T15:05:08.520 回答