如何在PHP中处理csv文件时指定编码?

时间:2010-01-12 10:57:21

标签: php fgetcsv

<?php
$row = 1;
$handle = fopen ("test.csv","r");
while ($data = fgetcsv ($handle, 1000, ",")) {
    $num = count ($data);
    print "<p> $num fields in line $row: <br>\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        print $data[$c] . "<br>\n";
    }
}
fclose ($handle);
?> 

以上来自php手册,但我没有看到指定编码的位置(如utf8左右)

3 个答案:

答案 0 :(得分:3)

尝试更改区域设置。

就像下面您提供的manual中的示例所示:

  

注意:此功能会考虑区域设置。如果LANG是例如是en_US.UTF-8,   此函数读取单字节编码的文件错误。

Suggested approach by comment on the same page

setlocale(LC_ALL, 'ja_JP.UTF8'); // for japanese locale

来自setlocale()

  

可以在RFC 1766ISO 639中找到区域设置名称。不同的系统有   语言环境的不同命名方案。 [...]在Windows上,setlocale(LC_ALL, '')设置了   系统区域/语言设置中的区域设置名称(可通过“控制面板”访问)。

答案 1 :(得分:0)

一个这样的事情是出现了UTF字节顺序标记或BOM。字节顺序标记的UTF-8字符是U + FEFF,或者更确切地说是三个字节 - 0xef,0xbb和0xbf - 位于文本文件的开头。对于UTF-16,它用于指示字节顺序。对于UTF-8,没有必要。

因此您需要检测三个字节并删除BOM。下面是一个关于如何检测和删除三个字节的简化示例。

$str = file_get_contents('file.utf8.csv');
$bom = pack("CCC", 0xef, 0xbb, 0xbf);
if (0 == strncmp($str, $bom, 3)) {
    echo "BOM detected - file is UTF-8\n";
    $str = substr($str, 3);
}

这就是全部

答案 2 :(得分:0)

试试这个:

If range("S20") = 1 Then

Call Macro1
Call ScheduleCopyPriceOver

ElseIf range("S21") = 2 Then

Call Macro2
Call ScheduleCopyPriceOver

Else
Call ScheduleCopyPriceOver
End If