【问题标题】:what is the difference between windows csv and mac csv?windows csv和mac csv有什么区别?
【发布时间】:2013-05-13 13:48:56
【问题描述】:

我正在尝试使用此代码解析 csv 文件

if (($handle = fopen($csvFilePath, "r")) !== FALSE) {
        $c=0;
        $string="";
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if($c>0)
        {
        if(($data[$email]!="") and ($data[$firstname]!="") and ($data[$lastname]!=""))
        {
        $string.='(1,';         
            $string.="'".$data[$email]."',";
            $string.="'".$data[$firstname]."',";
            $string.="'".$data[$lastname]."',";
            $string.="'".Yii::app()->params['clientimporttext']."'";

       $string.='),';
       }
        }
        $c++;
    }
fclose($handle);

}

在 windows csv 上运行良好。
但是当我从 mac 创建一个 csv 并解析它不工作时。(它无法识别行尾),

当我使用 mac 打开相同的 windows csv 并使用相同的代码进行解析时,它也不起作用。
但是当我将它保存为 windows csv 时。它再次起作用。
那么实际上 wat 是 mac csv 和 windows csv 之间的区别吗?
这两个的分隔符不同吗?
我应该如何更改代码以使其适用于两者?

【问题讨论】:

  • 区别在于行尾字符.... 注意:如果 PHP 在读取 Macintosh 计算机上或由 Macintosh 计算机创建的文件时无法正确识别行尾,则启用 auto_detect_line_endings 运行时配置选项可能帮助解决问题。
  • 查看auto_detect_line_endings

标签: php csv


【解决方案1】:

答案在 PHP 文档 cmets 中:

http://be2.php.net/manual/en/function.fgetcsv.php

注意:如果 PHP 在读取 Macintosh 计算机上或由 Macintosh 计算机创建的文件时无法正确识别行尾,启用 auto_detect_line_endings 运行时配置选项可能有助于解决问题。

问题在于 Windows 和类 unix 机器(就像你的 mac 一样)上的行尾之间的差异:windows ='\r\n'unix = '\n'

解决方法:在打开文件前添加这一行:

ini_set('auto_detect_line_endings',TRUE);

【讨论】:

    【解决方案2】:

    Mac 和 Windows 使用不同的 EOL 字符。在最好的日子里,这会让人感到困惑。 以下是它们如何在不同平台上工作的一个很好的解释: http://peterbenjamin.com/seminars/crossplatform/texteol.html

    【讨论】:

      【解决方案3】:

      Windows 中的返回字符在 Mac 中是 \r,我相信它是 \r\n

      【讨论】:

      • 在 Windows 上是 \r\n,在 unix 上是 \n,在 mac 上是(是?)\r
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2012-06-07
      • 2018-07-24
      相关资源
      最近更新 更多