我有一个简短的脚本,读取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
我试着把下面的代码放在前面:
mb_internal_encoding('UTF-8');
但是没有效果。
在Vi中打开csv文件,显示ü成功,说明文件在服务器上是正确的。
谁能建议如何PHP成功地处理德国字符时解析CSV?
所示的代码本身应该可以工作。我想问题是由CSV文件的字符编码引起的,这似乎不是utf-8
。您需要找出输入文件的编码是什么。
一旦您发现,您可以使用iconv
命令将文件转换为utf-8
。(在评论中,您告诉输入编码是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在执行命令之前创建并截断输出文件。