我有一个简短的脚本,可以读取如下所示的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如何成功处理德语字符?
答案 0 :(得分:1)
显示的代码本身应该有效。我想问题是由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在执行命令本身之前创建并截断输出文件。