将Excel转换为带有UTF8编码的CSV

644
我有一个Excel文件,其中包含一些西班牙语字符(如重音符等),我需要将其转换为CSV文件以用作导入文件。然而,当我选择“另存为CSV”时,它会破坏那些不是ASCII字符的“特殊”西班牙语字符。似乎它也会这样处理左右引号和长破折号,这些符号看起来是源文件的原始用户在Mac上创建的。
由于CSV只是一个文本文件,我相信它可以处理UTF8编码,所以我猜这是Excel的限制,但我正在寻找一种从Excel到CSV的方法,并保持非ASCII字符完整。

15
在我发布这个问题之前,我看到过那个问题,但是那个问题是关于已经有一个UTF8格式的CSV文件并在Excel中打开它,而不是相反的情况。 - Jeff Treuting
8
下面的答案似乎可行,但它们只是权宜之计。有没有人知道如何让Excel实现这个功能? - NielW
3
这是一个非常让人烦恼的Excel限制。我在uservoice上提出了一个功能请求:http://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application/suggestions/10006149-support-saving-csv-in-utf-8-encoding,欢迎投票并实现它。 - Doron Yaacoby
3
在我的语言中,Excel会自动将每个“…”或“oe”或“ae”转换为Unicode等效项(…,œ,æ),但当到导出时,它会惊叫着说:“天哪,这些字符是什么?” 微软,你是认真的吗? - Martin
7
根据Excel用户反馈,微软上个月开始着手将UTF-8编码应用于.csv文件的保存 https://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application/suggestions/10006149-support-saving-csv-in-utf-8-encoding - moloko
显示剩余6条评论
36个回答

0
我需要在我的Mac上自动化这个过程。最初我尝试使用mpowered建议的catdoc/xls2csv,但是xls2csv无法检测文档的原始编码,并且并非所有文档都相同。我最终做的是将默认的网页输出编码设置为UTF-8,然后将文件提供给Apple的Automator,应用Convert Format of Excel Files操作以转换为Web Page (HTML)。然后使用PHP、DOMDocument和XPath查询文档并将其格式化为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 {}

这是一个非常费解的做法,但这确实是我找到的最可靠的方法。

-1
(在Mac上:)从Excel另存为CSV文件。在TextWrangler(它是免费的)中打开CSV文件并使用“另存为”。在保存对话框中选择Unicode(UTF-8)。完成
(我猜您也可以使用TextEdit进行此操作 - 如果您玩弄打开和保存设置。尝试打开文件:自动,保存文件:UTF-8)

这种解决方案的问题在于它是有损的。如果您有不适合每个代码点一个字节编码的代码点,则这些字符将在转换中丢失。 - Flimm

-1

对于那些使用Sublime Text的人:使用带BOM的UTF-16 LE编码保存即可解决问题;-)


2
不行,因为UTF-16和UTF-8不同,而问题是关于UTF-8的。 - Flimm

-1
另一种方法是在记事本中打开UTF-8 CSV文件,这样它将正确显示。 然后用制表符替换所有的“,”。 将所有内容粘贴到一个新的Excel文件中。

5
问题是关于将Excel文件转换为UTF-8编码的CSV文件。这个答案以一个UTF-8编码的CSV文件开始! - Flimm

-3

你可以将 Excel 文件保存为 Unicode 文本,它是以制表符分隔的。


它的意义在于生成一个制表符分隔的文件(而不是逗号分隔的文件),这是大多数人(包括我)都可以处理的内容。 - jogojapan
2
在Excel中,“Unicode文本”指的是UTF-16,而不是问题所要求的UTF-8。 - Flimm
这正是对我有效的方法。问题在于,对于大多数人来说,并不仅仅是文件是否以UTF-8编码的问题,而是“特殊”字符是否得到保留。Excel在2016年仍未能做到这一点,这迫使我们跳过许多弯路。 - Henry Rusted

-3
我使用了以下解决方案:Mac Exel 2008 > 文件 > 另存为,然后在格式下使用 MS_DOS 逗号分隔 (.csv)。完美解决。

5
这个问题特别涉及到UTF-8编码。 - Olivier 'Ölbaum' Scherler
这没有帮助。 - JD-V

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接