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
。如果您需要更深入的信息,请参阅此处:
【讨论】:
如果我选择一种编码方式,其中 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 文件
fputcsv 导出excel,解决内存性能乱码科学计数法问题