我需要将从Mac Excel 2011导出的CSV文件转换为CMS可以识别的可导入格式(解决方案不应该相关,但是导入格式是针对Drupal Feeds模块的,尽管目标)。
为了做到这一点,目前我需要在Vim中执行以下操作:
:%s/r/r/g
:w ++enc=utf8
意思是:
- 将回车转换为某种通用格式
- 最初当Excel导出它们时,回车字符由
^M
表示。 - Vim命令
:%s/r/r/g
将它们全部转换为CMS识别的回车格式
- 最初当Excel导出它们时,回车字符由
- 将字符编码转换为UTF8。
- 最初导出时,字符集是
ASCII Extended
或类似的。
- 最初导出时,字符集是
理想情况下,这个过程需要在上传文件作为导入的一部分时触发,这意味着PHP将触发该过程,无论这是否对该过程有任何影响。不过,现在我觉得用shell脚本或类似的东西来处理这个解决方案更舒服,当然,如果我能弄清楚如何将它挂钩到Drupal 7 Feeds中,PHP解决方案是受欢迎的。
未测试代码:
#!/bin/php
<?php
$replacements = array(
// Adjust destination char to your liking
"rn" => "n",
"r" => "n",
"n" => "n",
);
// No risk to split chars: input is single byte
while( $line = fread(STDIN, 10240) ){
// Normalize line feeds
$line = strtr($line, $replacements);
// Convert to UTF-8 (adjust source encoding to your needs)
$line = iconv('CP1252', 'UTF-8', $line);
fwrite(STDOUT, $line);
}
用法:
./fix-csv < input.csv > output.csv