我有一个Excel文件,其中有一些西班牙字符(波浪号等),我需要将其转换为CSV文件作为导入文件使用。然而,当我将另存为CSV时,它会破坏不是ASCII字符的“特殊”西班牙字符。它似乎也这样做的左右引号和长破折号,似乎是来自最初的用户在Mac中创建Excel文件。
由于CSV只是一个文本文件,我确信它可以处理UTF8编码,所以我猜这是Excel的限制,但我正在寻找一种方法,从Excel到CSV,并保持非ascii字符完整。
我有一个Excel文件,其中有一些西班牙字符(波浪号等),我需要将其转换为CSV文件作为导入文件使用。然而,当我将另存为CSV时,它会破坏不是ASCII字符的“特殊”西班牙字符。它似乎也这样做的左右引号和长破折号,似乎是来自最初的用户在Mac中创建Excel文件。
由于CSV只是一个文本文件,我确信它可以处理UTF8编码,所以我猜这是Excel的限制,但我正在寻找一种方法,从Excel到CSV,并保持非ascii字符完整。
当前回答
Excel通常将csv文件保存为ANSI编码,而不是utf8编码。
更正文件的一个选项是使用Notepad或notepad++:
使用Notepad或notepad++打开.csv文件。 复制内容到你的电脑剪贴板。 从文件中删除内容。 将文件的编码更改为utf8。 将剪贴板上的内容粘贴回来。 保存文件。
其他回答
I needed to automate this process on my Mac. I originally tried using catdoc/xls2csv as suggested by mpowered, but xls2csv had trouble detecting the original encoding of the document and not all documents were the same. What I ended up doing was setting the default webpage output encoding to be UTF-8 and then providing the files to Apple's Automator, applying the Convert Format of Excel Files action to convert to Web Page (HTML). Then using PHP, DOMDocument and XPath, I queried the documents and formatted them to CSV.
这是PHP脚本(process.php):
<?php
$pi = pathinfo($argv[1]);
$file = $pi['dirname'] . '/' . $pi['filename'] . '.csv';
$fp = fopen($file,'w+');
$doc = new DOMDocument;
$doc->loadHTMLFile($argv[1]);
$xpath = new DOMXPath($doc);
$table = [];
foreach($xpath->query('//tr') as $row){
$_r = [];
foreach($xpath->query('td',$row) as $col){
$_r[] = trim($col->textContent);
}
fputcsv($fp,$_r);
}
fclose($fp);
?>
这是我用来将HTML文档转换为csv的shell命令:
find . -name '*.htm' | xargs -I{} php ./process.php {}
这是一种非常非常迂回的方法,但这是我发现的最可靠的方法。
一个简单的解决方法是使用谷歌电子表格。粘贴(只有当您有复杂公式时才使用值)或导入工作表,然后下载CSV。我只是试了几个字符,效果相当不错。
注意:谷歌表在导入时有限制。在这里看到的。
注意:小心使用谷歌表的敏感数据。
编辑:另一种选择-基本上他们使用VB宏或插件强制保存为UTF8。我没有尝试过这些解决方案,但它们听起来很合理。
Encoding -> Convert to Ansi将其编码为Ansi /UNICODE。Utf8是Unicode的一个子集。也许在ANSI中会正确编码,但在这里我们谈论的是UTF8, @SequenceDigitale。
还有更快的方法,比如导出为csv(逗号分隔),然后用notepad++(免费)打开csv,然后Encoding > Convert to UTF8。但前提是每个文件必须执行一次。如果你需要经常更改和导出,那么最好是LibreOffice或GDocs解决方案。
看起来很有趣,我发现将180MB的电子表格保存到UTF8 CSV文件中最简单的方法是将单元格选择到Excel中,复制它们,并将剪贴板的内容粘贴到SublimeText中。
另一个解决方案是用winword打开文件,并将其另存为txt,然后用excel重新打开,它将工作ISA