【问题标题】:CSV read issue between Mac and Win - missing \n charMac 和 Win 之间的 CSV 读取问题 - 缺少 \n char
【发布时间】:2013-04-20 19:49:22
【问题描述】:

我有一个基本的 csv 文件读取,但它无法读取保存在 Mac 平台上的 csv。

我知道问题来自Different operating system families have different line-ending conventions,但我无法解决。

我找到了一个建议 - 以二进制模式打开文件,但没有用。

代码非常基本:

file opening:

$this->fileHandler = fopen($this->filename, 'rb');

read line:

$columns = fgetcsv(
    $this->fileHandler,
    $this->length,
    $this->delimiter,
    $this->enclosure
);

我用 Notepad++ 打开了这两个文件,Mac 文件似乎在行尾缺少 \n 字符,但 \r 在那里。

【问题讨论】:

    标签: php file csv file-io


    【解决方案1】:

    我不知道这是否适用于 Mac,但我知道在将文本文件从 Windows 移动到某些 Linux 版本时,我可以在文件上运行 dos2unix filename 命令,它会修复格式我。也许 Mac 有类似的功能?

    编辑:也许这会有所帮助:http://schmeits.wordpress.com/2010/08/26/dos2unix-alternative-those-darn-m-characters/

    【讨论】:

    • 即使这是一个解决方案,我也不想预先操作文件或以任何方式更改它...谢谢 --- 我可以手动将所有 \n 插入到旁边\r char 但似乎效率很低
    • 您是说您不想“预操作”文件,但您愿意手动添加换行符?
    • 我可能一直不清楚,我可以替换,但我不想......似乎很多昂贵的无用代码。
    • 这是一个命令,而不是昂贵的无用代码......但 Alex Shesterov 发布了一个更好的解决方案,因此可能值得一看。
    【解决方案2】:

    在使用fgetcsv()之前将auto_detect_line_endings选项设置为true

    ini_set("auto_detect_line_endings", true);
    // rest of your code 
    

    【讨论】:

    • 这是一个很好的答案。它救了我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2018-12-12
    相关资源
    最近更新 更多