PHP fputcsv 编码

Posted

技术标签:

【中文标题】PHP fputcsv 编码【英文标题】:PHP fputcsv encoding 【发布时间】:2012-09-11 10:07:53 【问题描述】:

我用 fputcsv 创建 csv 文件。我希望 csv 文件位于 windows1251 ecnding 中。但找不到解决办法。我怎样才能做到这一点? 干杯

【问题讨论】:

【参考方案1】:

Excel 文件的默认编码是机器特定的 ANSI,主要是 windows1252。但由于您正在创建该文件并可能插入 UTF-8 字符,因此无法正常处理该文件。

您可以在创建文件时使用iconv()。例如:

function encodeCSV(&$value, $key)
    $value = iconv('UTF-8', 'Windows-1252', $value);

array_walk($values, 'encodeCSV');

【讨论】:

当我使用这个方法时出现这个错误:iconv(): Detected an invalid character in input string "csv 文件的默认编码是 windows1251"...?!?!谁设置了这个默认值? 刚起床 :),windows1252 代表 EN-US 请更改答案代码以反映 Windows-1252 而不是 Windows-1251 @rayVenues 已更改 :)【参考方案2】:

它正在工作:享受 在 fputcsv 之前使用它:

$line = array_map("utf8_decode", $line);

【讨论】:

被低估的评论!【参考方案3】:

该文件将采用您的字符串所在的任何编码。php 字符串是原始字节数组,它们的编码取决于字节的来源。如果您只是从源代码文件中读取它们,它们就在您保存源代码的任何位置。如果它们来自数据库,则它们采用数据库连接设置的任何编码。

如果您需要从一种编码转换为另一种编码,请使用iconv。如果您需要更深入的信息,请参阅此处:

What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text Handling Unicode Front To Back In A Web App

【讨论】:

如果我选择一种编码方式,其中 CSV 文件中使用的 ," 采用不同的编码方式,例如 UTF-16? 然后将 UTF-16 编码的", 提供给fputcsv 作为参数。 (虽然还没有真正尝试过,但这是我的第一次尝试。) 这个回复和通读文章拯救了我的一天。谢谢!【参考方案4】:
fputs( $fp, $bom = chr(0xEF) . chr(0xBB) . chr(0xBF) );

试试这个对我有用!!!

【讨论】:

是的,首先fputs 像上面一样,然后fputcsv 之后也为我修复了它。 BOM 是 Excel 需要正确显示变音符号和特殊字符的字节顺序标记,尤其是在 Mac 上。【参考方案5】:

试试 iconv 功能:

http://php.net/manual/en/function.iconv.php

要将您传递给 fputcsv 函数的数组成员转换为您想要的编码。

【讨论】:

【参考方案6】:
$string = iconv(mb_detect_encoding($string), 'Windows-1252//TRANSLIT', $string);

【讨论】:

如果您在答案中添加进一步的解释,这将对读者有所帮助,以便与其他解决方案选择相比,他们可以看到您的答案中的价值。使用edit 改进您的答案。

以上是关于PHP fputcsv 编码的主要内容,如果未能解决你的问题,请参考以下文章

PHP 使用 fputcsv 高效地写入和输出 csv 文件

php使用fputcsv进行大数据的导出

php fputcsv 读取不到中文文件数据

fputcsv 导出excel,解决内存性能乱码科学计数法问题

PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数

在 PHP 中将 CSV 写入不带附件的文件