所以我这样做了(我使用Drupal 6):
while(@ob_end_clean());
drupal_set_header("Content-type: text/csv;");
drupal_set_header("Cache-Control: no-store, no-cache");
drupal_set_header("Content-Disposition: attachment; filename=translations.csv");
print chr(255) . chr(254) . mb_convert_encoding($output, 'UTF-16LE', 'UTF-8');
exit;
导出 utf-8 字符的 CSV。当我导入 excel 时,utf-8 字符会正确显示。
问题是,excel 不会解析分隔符,即逗号将全部显示在一列中,而不是在文件打开时用作分隔符。
有没有办法让它在打开它时将逗号用作分隔符?
csv 中的一行如下所示:
$output .= '"'.str_replace('"', '""', $id).'","'.str_replace('"', '""', $source).'","'.str_replace('"', '""', $translation) . '"';
我尝试使用制表符 ''t 而不是逗号作为分隔符,但同样的事情会发生,即。 打开文件时,制表符不会用作分隔符
要使用逗号作为默认的CSV分隔符,需要更改相应的Windows区域设置选项:
转到控制面板 -->区域和语言选项(或日期, 时间和区域选项 ->某些区域和语言选项 机器) ->单击自定义按钮。在打开的对话框中 您将看到"列表分隔符"选项,您可以在其中更改 逗号到不同的字符 -->单击"应用",然后单击"确定",然后单击"确定" 再次申请。
请注意以下事项:
- 默认情况下,此设置用于 CSV 导入和导出。
- 您应该使用
File > Open
打开 CSV 文件,而不是Data > Import External Data > Import Data...
,或者只需双击资源管理器中的任何 CSV,它将在 Excel 中打开并应用默认分隔符。
阅读更多:
- http://www.ozgrid.com/forum/showthread.php?t=134498
- https://superuser.com/a/298177/187330
如果您使用的是Excel 2007,那么如果您先打开Excel,则可以转到"Data
"选项卡,然后选择"From Text
在资源管理器浏览器中选择您的.csv文件,然后应出现文本向导。这为您提供了更多步骤和选项来控制它在分解列等方面所寻找的内容。
旧版本的 Excel 也支持它,但我不能确定它在同一个地方,我认为是这样。
试试这个向导,看看它是否对你的问题进行了排序。
对于 Excel
中具有 x 分隔值的 Unicode 支持,请使用制表符分隔的 UTF-16 Little-Endian(当您另存为时 Excel 生成的内容...> Unicode 文本 (*.txt))。
如果你不这样做,你会遇到像你正在经历的问题。
参见:Excel 和 Unicode