将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个回答

13

在 Excel 2016 及更高版本(包括 Office 365)中,有一种专门用于 UTF-8 格式的 CSV 选项。

在 Office 365 中,选择“另存为”,之前可能会选择 CSV(逗号分隔)格式,现在可以保存为其中一个文件类型:CSV UTF-8(逗号分隔)(*.csv)


2
你应该提供一些关于如何使用该选项的说明。 - rovyko
1
@dexgecko 当然可以:它被称为“保存”按钮/菜单。在Windows上的Excel 2016中,现在有四种CSV导出类型:CSV保存为“ANSI”(或多或少相当于Latin1,但在非西方操作系统安装中可能会有所不同,我不确定),UTF-8 CSV保存为带BOM的UTF-8,CSV(DOS)保存为CP850(再次取决于安装?),而CSV(Mac)保存为MacRoman。 - user8308466
3
奇怪,我的Excel 2016中没有UTF-8 CSV选项。 - rovyko
1
@dexgecko 确实有些奇怪。根据此页面(法语,抱歉),此功能是在 2016 年 11 月的版本 1610 中添加的。我目前使用的是 1802 版本。但是,我认为只有 Office 365 才有这种演进,而我使用的是 Office Pro 2016(而不是 365 版本)。也许尝试更新你的 Office。 - user8308466
就此而言,这适用于Excel 2016版本1909构建12026.20334。我相当确定直到几周前它才能正常工作,因为我不得不采用上面Nick的解决方案来保持变音符号的完整性。可能修复不在Excel本身中,而是在Windows更新中。 - RolfBly
显示剩余3条评论

9
使用PowerShell怎么样?
Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8

1
非 ASCII 西班牙字符的文本将从原始西班牙字符更改为 ANSI 使用的编码字符串。因此,文本将与原始文本不同。 - Jason Williams

8

对于那些寻求完全编程化(或至少是服务器端)解决方案的人,我使用catdoc的xls2csv工具取得了巨大成功。

安装catdoc:

apt-get install catdoc

进行转换:

xls2csv -d utf-8 file.xls > file-utf-8.csv 

这非常快。

请注意,重要的是您包含 -d utf-8 标志,否则它将使用默认的 cp1252 编码来编码输出,您可能会丢失信息。

请注意,xls2csv 仅适用于 .xls 文件,不适用于 .xlsx 文件。


或者选择不同的输出编码,不能用一个单一的答案解决所有人的问题 :-) - mpowered
2
我知道这很不幸,但事实是这个答案确实会给一些用户带来问题。你只是因为运行的字符符合cp1252才比较幸运,你在回答中没有提到这种风险的警告,只是说它“毫无问题地工作”。你并没有被要求修复每个人的问题,只是OP的问题,而很多人都有这个问题。 - Flimm
1
好的,我已经在回答帖子中修复了问题并取消了踩。 - Flimm

7

最简单的方法: 不需要使用Open Office或Google Docs

  1. 将文件保存为"Unicode文本文件";
  2. 现在您拥有一个Unicode文本文件
  3. 用记事本打开它,并选择“另存为”时选择“utf-8”或 其他想要的代码页
  4. 将文件扩展名从"txt"改为"csv"。这将生成一个以制表符分隔的UTF-8 csv文件。
  5. 如果您想要逗号分隔的文件,请打开刚刚重命名的csv文件,然后将所有制表符替换为逗号。在Win 10的记事本中,只需选择一个制表符字段,然后单击Ctrl+H。在打开的窗口中,在“替换为”字段中输入逗号,,然后单击“全部替换”。保存您的文件。结果将是一个以逗号分隔的UTF-8 csv文件。

无论如何不要用 MS-Office 打开它!!! 现在您有一个以制表符分隔的CSV文件。 如果您执行了第5步,则为逗号分隔的文件。


2
对于制表符分隔的文件,最好使用 .txt 扩展名。逗号分隔的文件 csv 只会让人感到困惑。 - dof1985

5

虽然看起来有些滑稽,但我发现将我的180MB电子表格保存为UTF8 CSV文件的最简单方法是将单元格选入Excel中,复制它们,然后将剪贴板内容粘贴到SublimeText中。


1
这是可行的,因为Excel通过剪贴板提供了所选内容的TSV版本。您也可以使用记事本代替SublimeText,但如果这样做,请记得使用UTF-8编码保存! - Don Cruickshank

3

3

简单的方法:下载开放办公软件(点击这里),加载电子表格并打开excel文件(.xls.xlsx)。然后将其另存为文本CSV文件,会弹出一个窗口询问是否保留当前格式或保存为 .ODF 格式。选择“保留当前格式”,在新窗口中根据文件所写语言的选项选择最适合您的选项。对于西班牙语,请选择西欧(Windows-1252/ WinLatin 1),文件就可以正常工作了。如果选择 Unicode (UTF-8),它将不能与西班牙字符一起使用。


3
UTF-8 可以使用西班牙语字符,没有任何问题。 - Flimm

3
  1. 将xls文件(Excel文件)保存为Unicode文本=>文件将以文本格式(.txt)保存

  2. 将格式从.txt更改为.csv(将文件名从XYX.txt重命名为XYX.csv)


3
这并行得通,因为你的指示没有包含将文件数据中的制表符转换为逗号的必要步骤。 - Matthew Rodatus
1
Excel的“Unicode文本”是UTF-16,而不是问题中要求的UTF-8。 - Flimm

3
假设您使用的是Windows环境,在Excel中保存和处理文件,然后在Gnome Gnumeric(免费)中打开保存的Excel文件。将Gnome Gnumeric的电子表格保存为CSV格式,这样可以将其保存为UTF-8编码的CSV格式,至少对我来说是这样的。

3

我也遇到了相同的问题,但有一个简单的解决方法。

  1. 在Excel 2016或更高版本中打开您的xlsx文件。
  2. 在“另存为”中选择此选项:“(CSV UTF-8(逗号分隔)*.csv)”

这样做可以完美地解决问题,生成了一个可以导入任何软件的csv文件。我将这个csv文件导入我的SQLITE数据库中,所有Unicode字符都完好无损地运行。


我的 Excel 2016 版本中没有此选项。您是否使用的是 Office 365 版本? - Don Cruickshank

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