Excel 转 CSV 与 UTF8 编码 [已关闭]

Excel to CSV with UTF8 encoding [closed]

提问人:Jeff Treuting 提问时间:11/19/2010 最后编辑:Jeff Treuting 更新时间:10/27/2019 访问量:881227

问:


这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。

3年前关闭。

我有一个 Excel 文件,其中包含一些西班牙语字符(波浪号等),我需要将其转换为 CSV 文件以用作导入文件。但是,当我执行另存为 CSV 时,它会破坏不是 ASCII 字符的“特殊”西班牙语字符。它似乎也使用左右引号和长破折号来做到这一点,这些短划线似乎来自在 Mac 中创建 Excel 文件的原始用户。

由于 CSV 只是一个文本文件,我确信它可以处理 UTF8 编码,所以我猜这是 Excel 的限制,但我正在寻找一种从 Excel 到 CSV 并保持非 ASCII 字符完好无损的方法。

Excel 编码 csv utf-8

评论

15赞 Jeff Treuting 11/19/2010
我在发布之前看到了这个问题,但它是关于已经有一个 UTF8 CSV 并在 Excel 中打开它,而不是相反。
8赞 NielW 1/28/2014
下面的答案似乎有效,但它们只是解决方法。有谁知道如何让 Excel 做到这一点?
2赞 AMM 2/4/2015
我想放弃我的 2 美分:经过大量试验和错误,尝试使用 VBA 函数等......(出于各种原因,我正在使用 Excel 97)...只需将另存为“CSV (MSDOS)”格式即可为我解决了这个问题。就我而言,Citrix 网络研讨会 (GotoWebinar) CSV 数据最终带有字符以破坏我们这边的一些 Apex 代码 - 保存到“CSV (MSDOS)”解决了我(以前)将 CSV 导出加载到 Notepad++ 并将其粘贴到 UTF-8 空白文件中并重新保存的问题。:-P :-)
3赞 Doron Yaacoby 10/1/2015
这是一个非常烦人的 Excel 限制。我为此打开了一个 uservoice 功能请求:excel.uservoice.com/forums/...,请随时投票并实现它
7赞 moloko 7/19/2016
根据 Excel 用户语音,Microsoft上个月开始为 .csv 开发 UTF-8 excel.uservoice.com/forums/......

答:

145赞 aendra 11/19/2010 #1

我发现 OpenOffice 的电子表格应用程序 Calc 非常擅长处理 CSV 数据。

在“另存为...”对话框中,单击“格式选项”以获取CSV的不同编码。LibreOffice 的工作方式与 AFAIK 相同。

calc save dialog

评论

0赞 Jeff Treuting 11/19/2010
我确信这有效,我只是碰巧还没有 OpenOffice,所以 Google Docs 在我的情况下更容易。但感谢您的建议
21赞 Christian Davén 9/20/2012
OpenOffice Calc 在打开和保存“CSV”文件(字段分隔符、编码等)时比 Google Docs 和 Excel 有更多更好的选择。此外,Google Docs 目前每个电子表格有 400,000 个单元格的限制,而 OpenOffice Calc 则没有。
4赞 Rupert Rawnsley 10/28/2014
我可以确认 LibreOffice 也可以使用:它在导出时提供了字符编码选项,遗憾的是 Excel 中缺少这些选项。
1赞 Nathan 8/9/2017
对于那些处理敏感数据的人来说,这是一个很好的选择。OpenOffice套件可以作为那些计算机被锁定的人的便携式安装。
422赞 nevets1219 11/19/2010 #2

一个简单的解决方法是使用 Google 电子表格。粘贴(仅当您有复杂公式时才有值)或导入工作表,然后下载 CSV。我只是尝试了几个字符,效果很好。

注意:Google 表格在导入时确实有限制。请看这里

注意:小心使用 Google 表格处理敏感数据。

编辑:另一种选择 - 基本上他们使用 VB 宏或插件来强制另存为 UTF8。我没有尝试过这些解决方案中的任何一种,但它们听起来很合理。

评论

69赞 Indolering 5/23/2013
也许 Joel Slotsky(Excel 的前 PM)可以向他们发送他十年前的帖子,内容是 The Absolute Minimum Every Software Developer Absolutely, Positive Must Know About Unicode and Character Sets
9赞 Fer 10/2/2013
使用普通的 Windows 记事本(使用另存为,然后在编码选项中选择 utf-8)对我有用。对我来说,这对我来说是最好的方法,因为这必须由对其机器没有管理员权限的用户完成,因此不需要安装其他软件。
9赞 Robert Cutajar 10/2/2013
OpenOffice JustWorks(tm) 没有麻烦 - 我认为它应该包括在内
10赞 Seb 10/2/2014
呃。我只是后背发抖。如果您的 excel 文件有 200,000 行怎么办?或者包含您不想包含在 excel spreadsheat 中的敏感数据?如果需要,请使用 Openoffice/Libreoffice。
2赞 MLE 7/26/2016
如果文件大小很大怎么办?如果我没记错的话,Goolge 表的大小限制在 75M 左右。我有一个文件是 700M
1赞 SequenceDigitale.com 2/17/2011 #3

“nevets1219”的第二个选项是在 Notepad++ 中打开 CSV 文件并转换为 ANSI。

在顶部菜单中选择: 编码 -> 转换为 ansi

评论

0赞 Zane 3/29/2013
不知道你为什么被否决了。Notepad++ 为我做到了。由于机密文件,无法将我的文件存储在 Google 电子表格中。
3赞 Flimm 3/18/2016
这个答案的问题在于你首先如何生成CSV文件。如果只是从 Excel 另存为 CSV,则编码将为 cp1252,这是每个代码点一个字节的编码,因此将丢失不适合该编码的字符的信息。此外,最后,如果您想按照问题的要求进行操作,您应该转换为 UTF-8,而不是 Ansi。
0赞 rovyko 3/15/2018
这是迄今为止IMO更容易的答案。我正在使用 Excel 2016,发现它默认保存为 ANSI 编码,但将其转换为 UTF-8,这是我想要的。
22赞 leander 4/4/2011 #4

我发现另一个很有用: “Numbers”允许在另存为 CSV 时进行编码设置。

评论

8赞 Sruit A.Suk 12/20/2014
^ 它是Mac OSX中的一个应用程序
0赞 MrE 12/8/2017
还要小心 Numbers,因为它的行数有限制,而且我已经转换了这样的数据,然后没有意识到它已经裁剪了一些数据。Excel/CSV 的限制要高得多。
3赞 anroy 5/8/2011 #5

我无法在Mac Excel上找到此问题的VBA解决方案。似乎根本没有办法输出 UTF-8 文本。

因此,我最终不得不放弃VBA,咬紧牙关,学习AppleScript。它并不像我想象的那么糟糕。

解决方案描述如下: http://talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html

14赞 RedYeti 5/19/2012 #6

“nevets1219”对 Google 文档是正确的,但是如果您只是“导入”文件,它通常不会将其转换为 UTF-8。

但是,如果您将 CSV 导入现有的 Google 电子表格,它确实会转换为 UTF-8。

这里有一个食谱:

  • 在文档(或云端硬盘)主屏幕上,点击“创建”按钮,然后选择“电子表格”
  • 从“文件”菜单中选择“导入”
  • 点击“选择文件”
  • 选择“替换电子表格”
  • 选择您用作分隔符的任何字符
  • 点击“导入”
  • 从“文件”菜单中选择“下载为”-> CSV(当前工作表)

生成的文件将采用 UTF-8 格式

评论

2赞 Flimm 3/18/2016
这个答案的问题在于你首先是如何生成CSV文件的。如果通过在 Excel 中简单地另存为 CSV 来执行此操作,则 CSV 文件将位于 cp1252 中,这是每个代码点一个字节的编码。当涉及到无法容纳一个字节的字符时,这将导致信息丢失。
0赞 RedYeti 3/21/2016
好吧,这是任何这些答案的问题。并且将提供如何转换为 UTF-8 的任何答案,因为无法知道或控制原始编码是什么。
1赞 Flimm 3/25/2016
一些答案确实谈到了如何解决这个问题,例如,stackoverflow.com/a/15500052/247696
1赞 Lucas 6/7/2012 #7

编码 -> 转换为 Ansi 将以 ANSI/UNICODE 对其进行编码。Utf8 是 Unicode 的子集。也许在 ANSI 中会正确编码,但这里我们谈论的是 UTF8,@SequenceDigitale。

有更快的方法,例如导出为 csv(逗号分隔),然后使用 Notepad++(免费)打开该 csv,然后编码>转换为 UTF8。但前提是您必须对每个文件执行一次此操作。如果您需要频繁更改和导出,那么最好的是 LibreOffice 或 GDocs 解决方案。

评论

5赞 jameshfisher 3/11/2014
“Utf8 是 Unicode 的一个子集”:这毫无意义。UTF-8 是 Unicode 的编码
0赞 Flimm 3/18/2016
我不确定我是否能找到这个“编码 -> 转换为 Ansi”选项。
0赞 Jason Williams 11/28/2017
只需在 Notepad++ 中添加 ANSI csv 并将文件的编码更改为 utf8 即可将原始非 ASCII 西班牙语字符转换为与原始文本不匹配的编码字符串。
38赞 pmilewski 6/12/2012 #8

您可以在 Unix 下使用 iconv 命令(在 Windows 上也可作为 libiconv 使用)。

在命令行中将 Excel 下另存为 CSV 后,放入:

iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv

(请记住将 CP1250 替换为您的编码)。

对于无法导入 GoogleDocs 的大文件(如邮政编码数据库)运行速度快且出色(400.000 个单元格限制)。

评论

5赞 Sebastian 7/5/2014
如果您的内容包含无法用 1250 编码的字符,那将是无用的,更好的方法是在 Excel 中导出为“Unicode .txt”并使用 iconv 从 Utf16 转换。也许也可以做一个或从'\t'翻译成','sedtr
5赞 claymation 7/31/2014
另存为 CSV 或 MS-DOS CSV 时,Excel 的默认编码似乎是 CP858,另存为 Windows CSV 时为 Windows 1252(在 Excel for Mac 2011 上测试)。
4赞 Flimm 3/18/2016
我完全同意这是无用的,因为当 Excel 以 .csv 格式保存时,当涉及到无法以每个代码点一个字节编码编码的 Unicode 码位时,它会丢失信息。
3赞 spring_chicken 7/2/2012 #9

假设是 Windows 环境,像往常一样在 Excel 中保存和处理文件,然后在 Gnome Gnumeric 中打开保存的 Excel 文件(免费)。将 Gnome Gnumeric 的电子表格保存为 CSV,对我来说,它保存为 UTF-8 CSV。

1赞 vladaman 7/10/2012 #10

Microsoft Excel 可以选择使用 Unicode 编码导出电子表格。请参阅以下屏幕截图。

enter image description here

评论

14赞 ax. 7/18/2012
“Unicode 文本”以 UTF-16 LE (Little Endian) 保存,而不是 OP 要求的 UTF-8 格式。
0赞 mcNux 4/25/2013
是的,但这是在 Excel 中获取 x 分隔值的 Unicode 支持的最佳方式。我遇到了各种各样的问题,试图让 Excel 使用 UTF-8 打球!阅读更多
1赞 Marius Gri 9/18/2012 #11

使用记事本++打开.csv。如果你看到你的编码很好(你看到所有字符都应该是),按编码,然后转换为 ANSI else - 找出您当前的编码

评论

0赞 nikolas 5/24/2013
这对我有用。将MySQL DB导出为CSV并将其导入Excel时遇到希腊字符问题。
1赞 Flimm 3/18/2016
问题在于您首先如何生成 CSV 文件。如果您只是在 Excel 中另存为 CSV 文件,它会将其保存在 cp1252 中,这是一种每个代码点一个字节的编码,因此会丢失信息。
46赞 Eric 10/30/2012 #12

我知道这是一个老问题,但我碰巧遇到了这个问题,同时与 OP 相同的问题。

没有发现任何提供的解决方案是可行的选择,我开始发现是否有一种方法可以仅使用 Excel 来做到这一点。

幸运的是,我发现只有在从 xlsx 格式保存为 csv 格式时才会发生字符丢失问题(在我的情况下)。我尝试先将 xlsx 文件保存到 xls,然后再保存到 csv。它确实奏效了。

请试一试,看看它是否适合您。祝你好运。

评论

3赞 user56reinstatemonica8 7/31/2013
对我来说,在 Excel for Mac 2011 上,这有效,但前提是我选择 .如果我使用默认或 DOS CSV 选项,它不起作用 - 这两个选项都用随机垃圾字符替换重音字符。测试了字符,包括,,...不知道是不是真的UTF8,但字符没有被破坏。Windows comma separated (CSV)éèâ
13赞 user56reinstatemonica8 7/31/2013
快速确认 - 在 (Excel for Mac 2011) 上使用此方法生成的文件不会生成 UTF-8 csv,但是,它们确实会生成至少包含正确字符的 CSV,因此可以在文本编辑器中轻松转换为 UTF8,这比 Excel 默认吐出的荒谬的垃圾向前迈出了一大步。
0赞 cbmanica 9/5/2013
是的,同意,这对我也有用(Excel Mac 2011),它确实值得更多的赞成。
1赞 EM0 7/19/2015
这对我来说不太管用(使用 Excel 2007)。我的文件中有 2 个非 ASCII 字符,其中一个以这种方式保存正常,另一个则没有。
1赞 Flimm 3/18/2016
请注意,生成的 CSV 文件将采用 UTF-16 格式,而不是问题所提出的 UTF-8 格式。
1赞 Essam Altantawi 11/2/2012 #13

另一种解决方案是通过winword打开文件并将其保存为txt,然后通过excel重新打开它,它将工作ISA

3赞 Yessus 11/18/2012 #14

简单的方法:下载 Open Office(此处),加载电子表格并打开 excel 文件(或)。然后,只需将其另存为文本 CSV 文件,就会打开一个窗口,要求保留当前格式或另存为 .ODF 格式。选择“保留当前格式”,然后在新窗口中根据文件编写的语言选择更适合您的选项。对于西班牙语,选择西欧(),文件就可以正常工作了。如果选择 Unicode (),则它不适用于西班牙语字符。.xls.xlsxWindows-1252/ WinLatin 1UTF-8

评论

3赞 Flimm 3/18/2016
UTF-8 没有理由不能使用西班牙语字符。
3赞 Mena 3/6/2013 #15
  1. 将 xls 文件(Excel 文件)保存为 Unicode text=>file 将保存为文本格式 (.txt)

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

评论

3赞 Matthew Rodatus 12/4/2015
这不起作用,因为您的说明不包括在文件数据中将制表符转换为逗号的必要步骤。
1赞 Flimm 3/18/2016
Excel 的“Unicode 文本”是 UTF-16,而不是问题中要求的 UTF-8。
122赞 elomage 3/19/2013 #16
  1. 将 Excel 工作表另存为“Unicode 文本 (.txt)”。好消息是,所有国际字符都采用 UTF16 格式(注意,不是 UTF8)。但是,新的“*.txt”文件是 TAB 分隔的,而不是逗号分隔的,因此不是真正的 CSV。

  2. (可选)除非您可以使用 TAB 分隔文件进行导入,否则请使用您喜欢的文本编辑器并将 TAB 字符替换为逗号 “,”。

  3. 在目标应用程序中导入 *.txt 文件。确保它可以接受 UTF16 格式。

如果 UTF-16 已正确实现并支持非 BMP 代码点,则可以将 UTF-16 文件转换为 UTF-8,而不会丢失信息。我留给你去找到你最喜欢的方法。

我使用此过程将数据从 Excel 导入 Moodle。

评论

5赞 Mattias Lindberg 1/6/2014
终于奏效了!在Excel 2013上尝试了上述Excel选项,但没有成功。当我解析它时,我只是切换到使用 \t 作为拆分字符,它工作得很好!
1赞 Avatar 5/27/2014
需要将XLS导出为CSV以导入MySQL。使用Excel 2003,我以“Unicode 文本(.txt)”格式导出,然后使用记事本++将TAB替换为,然后将txt文件导入phpmyadmin,默认为“文件的字符集:utf-8”,格式为“使用加载数据的CSV”。所有编码均已正确传输。;
3赞 Oskar Limka 7/17/2015
谢谢。这是有道理的。为什么 MS 仍然拒绝使用 UTF 作为标准,这让我大吃一惊。
4赞 Flimm 3/18/2016
@OskarLimka:当你说“UTF”时,你指的是UTF-8还是UTF-16?因为Microsoft确实经常使用UTF-16。
9赞 3/22/2018
“好消息是,所有的国际字符都是UTF16(注意,不是UTF8).”完全是胡说八道。UTF-8 和 UTF-16 是对整套 Unicode 码位进行编码的两种方法。
8赞 mpowered 10/9/2013 #17

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

安装 catdoc:

apt-get install catdoc

进行转换:

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

这是极快的。

请注意,请务必包含该标志,否则它将以默认编码对输出进行编码,并且您将面临丢失信息的风险。-d utf-8cp1252

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

评论

0赞 mpowered 3/19/2016
或者选择不同的输出编码,不能用一个答案解决每个人的问题:-)
2赞 Flimm 3/21/2016
我知道这很不幸,但事实是这个答案会给某些用户带来问题。事实上,你只用适合 cp1252 的字符运行过这个,只是很幸运,你在答案中没有提供关于这种风险的警告,你只是说它“顺利工作”。你没有被要求解决每个人的问题,只是OP的问题,这是很多人都有的。
1赞 Flimm 3/21/2016
好了,我在回复帖子中修复了这个问题并删除了反对票。
9赞 Michael Schau 2/17/2014 #18

如何使用 Powershell。

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8

评论

1赞 Jason Williams 11/28/2017
非 ASCII 西班牙语字符的文本将从原始西班牙语字符更改为 ANSI 使用的编码字符串。因此,文本将与原文不同。
5赞 oscaroscar 2/27/2014 #19

尽管看起来很有趣,但我发现将 180MB 电子表格保存为 UTF8 CSV 文件的最简单方法是将单元格选择到 Excel 中,复制它们并将剪贴板的内容粘贴到 SublimeText 中。

评论

1赞 Don Cruickshank 3/21/2019
这是有效的,因为 Excel 通过剪贴板提供了所选内容的 TSV 版本。您同样可以使用记事本而不是 SublimeText,但请记住使用 UTF-8 编码保存!
26赞 Nick 1/28/2015 #20

执行此操作的唯一“简单方法”如下。首先,意识到 Excel .csv 文件中显示的内容和隐藏的内容之间存在差异。

  1. 打开包含信息的 Excel 文件(.xls、.xlsx)
  2. 在Excel中,选择“CSV(逗号分隔)(*.csv)”作为文件类型并另存为该类型。
  3. 在记事本(在“程序”下找到,然后在“开始”菜单中的“附件”下找到),在记事本中打开保存的 .csv 文件
  4. 然后选择 -> 另存为...在“另存为”框的底部,有一个标记为“编码”的选择框。选择 UTF-8(不要使用 ANSI,否则会丢失所有口音等)。选择 UTF-8 后,将文件保存为与原始文件名略有不同的文件名。

此文件采用 UTF-8 格式,保留所有字符和重音,例如可以导入到 MySQL 和其他数据库程序中。

这个答案取自这个论坛

评论

10赞 Flimm 3/18/2016
这是不正确的,因为步骤 2 另存为 CSV。这样做的问题在于 Excel 将 CSV 文件保存在 cp1252 中,这是一种每个代码点一个字节的编码。这会导致一个字节无法容纳的字符的信息丢失。
0赞 felipeaf 8/30/2016
它对我有用,但我不明白为什么。我的文件由 javascript 生成,在 excel 中总是被错误地读取(作为不同的编码)。但是当我在记事本中打开并另存为 utf-8 时,它工作正常!因此,看起来有一个带有编码的元数据。它是如何工作的?如果记事本可以保存 UTF-8 CSV 文件并且 Excel 可以读取它们,那么在我的程序中是否有可能生成正确的 UTF-8 CSV 文件,Excel 可以读取?
0赞 RolfBly 10/16/2017
为我工作。在从 Access 转换的 XSLX 中。音调符号和仅 LF 和 ISO 日期格式都可以。一个或另一个不适用于更流行的解决方案。
0赞 academic.user 1/29/2015 #21

我有同样的问题并遇到了这个插件,它在 excel 2013 中除了 excel 2007 和 2010 之外运行良好。

1赞 Elia Weiss 3/17/2015 #22

“保存”对话框>“工具”按钮>“Web 选项”>“编码”选项卡

评论

1赞 jogojapan 8/31/2015
这对我不起作用。按照我的理解,它仅在另存为 Web 格式(HTML 等)时生效,而不是另存为 CSV 时生效。
0赞 Elia Weiss 11/19/2015
适合我 - Office 2007
0赞 Hart 4/3/2020
无法在 Office 2010 上选择任何 CSV 配置文件。
2赞 Silent Sojourner 9/1/2015 #23

遇到了同样的问题,并在谷歌上搜索了这篇文章。以上都不适合我。最后,我将我的Unicode .xls转换为.xml(选择另存为...XML Spreadsheet 2003),并生成了正确的字符。然后,我编写了代码来解析 xml 并提取内容供我使用。

2赞 Julian 7/7/2016 #24

我写了一个小的 Python 脚本,可以导出 UTF-8 的工作表。

您只需提供 Excel 文件作为第一个参数,然后是要导出的工作表。如果未提供工作表,脚本将导出 Excel 文件中存在的所有工作表。

#!/usr/bin/env python

# export data sheets from xlsx to csv

from openpyxl import load_workbook
import csv
from os import sys

reload(sys)
sys.setdefaultencoding('utf-8')

def get_all_sheets(excel_file):
    sheets = []
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    all_worksheets = workbook.get_sheet_names()
    for worksheet_name in all_worksheets:
        sheets.append(worksheet_name)
    return sheets

def csv_from_excel(excel_file, sheets):
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    for worksheet_name in sheets:
        print("Export " + worksheet_name + " ...")

        try:
            worksheet = workbook.get_sheet_by_name(worksheet_name)
        except KeyError:
            print("Could not find " + worksheet_name)
            sys.exit(1)

        your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')
        wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
        for row in worksheet.iter_rows():
            lrow = []
            for cell in row:
                lrow.append(cell.value)
            wr.writerow(lrow)
        print(" ... done")
    your_csv_file.close()

if not 2 <= len(sys.argv) <= 3:
    print("Call with " + sys.argv[0] + " <xlxs file> [comma separated list of sheets to export]")
    sys.exit(1)
else:
    sheets = []
    if len(sys.argv) == 3:
        sheets = list(sys.argv[2].split(','))
    else:
        sheets = get_all_sheets(sys.argv[1])
    assert(sheets != None and len(sheets) > 0)
    csv_from_excel(sys.argv[1], sheets)

评论

0赞 Julian 2/6/2017
我稍微更新了实现并创建了一个要点 gist.github.com/julianthome/2d8546e7bed869079ab0f409ae0faa87
36赞 Don Cruickshank 7/13/2016 #25

您可以在没有第三方软件的现代 Windows 计算机上执行此操作。此方法是可靠的,它将处理包含带引号的逗号、带引号的制表符、CJK 字符等的数据。

1.从Excel保存

在 Excel 中,使用类型 保存数据。file.txtUnicode Text (*.txt)

2.启动 PowerShell

从“开始”菜单运行。powershell

3. 在 PowerShell 中加载文件

$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode

4. 将数据保存为 CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation

评论

3赞 absolute 2/28/2018
此方法非常适合具有超过 15,000 条记录的 CSV 文件,其行数超过记事本规定的 1024 个字符限制。只需几秒钟,并且不使用第三方软件。谢谢!
0赞 Ryan 9/4/2018
啊,即使我尝试使用 Google 表格,我也遇到了同样的问题。因此,也许这种 PowerShell 策略会奏效。这是我的问题。对于某些字符,例如某些表情符号,您需要按照以下说明使用:stackoverflow.com/a/10959780/470749CHARACTER SET utf8mb4
1赞 Don Cruickshank 9/4/2018
@Ryan 该问题特定于 MySQL。我只是尝试了该问题中有问题的字符,它在 Excel 和 PowerShell 中都运行良好。
0赞 Sjlver 2/2/2021
工作太棒了!也可以直接将这两个命令通过管道连接在一起:而无需使用中间变量。Import-Csv ... | Export-Csv ...$data
7赞 Solivan 1/8/2017 #26

最简单的方法:无需打开办公室和谷歌文档

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

无论如何都不要用MS-Office打开它!! 现在,您有一个制表符分隔的 CSV 文件。或者,如果应用了步骤编号 5,则使用逗号分隔的逗号。

评论

2赞 dof1985 4/5/2017
对于制表符分隔的文件,最好使用扩展名。,即逗号分隔的文件,只是令人困惑。.txtcsv
13赞 Nolmë Informatique 5/13/2017 #27

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

在 Office 365 中,执行“另存为”;以前可能选择了 CSV(逗号分隔),现在您可以保存为 CSV UTF-8(逗号分隔)(*.csv)的文件类型之一

评论

2赞 rovyko 3/15/2018
您应该提供有关如何使用该选项的一些说明。
1赞 3/22/2018
@dexgecko确定:它被称为“保存”按钮/菜单。Windows 上的 Excel 2016 现在有四种 CSV 导出类型:CSV 保存为“ANSI”(或多或少等效的 Latin1,但我不确定,这与非西方操作系统安装可能不同),UTF-8 CSV 使用 BOM 保存为 UTF-8,CSV (DOS) 保存为 CP850(同样,mais 取决于安装?)和 CSV (Mac) 保存为 MacRoman。
0赞 3/22/2018
但是,Excel 只能读取 UTF-8 和 ANSI CSV 文件(Excel 可以使用 BOM 进行选择)。要从其他编码导入,请重命名为 .txt,从 Excel 打开(然后您有一长串编码可供选择),并且由于它无法正确解释分隔符,请使用“转换”按钮拆分行。从其他语言约定导入 CSV 时,您也可以使用此技巧(例如,在法语中,归档分隔符是分号,因为逗号已用作小数分隔符)。
3赞 rovyko 3/22/2018
@Jean-ClaudeArbaut 奇怪,我在 Excel 8 中没有看到 UTF-2016 CSV 选项。
1赞 3/22/2018
@dexgecko 确实很奇怪。根据此页面(法语,对不起),该功能是在 2016 年 11 月的内部版本 1610 中添加的。我目前有 1802 版本。但是,我认为只有 Office 365 具有这种演变,并且我使用的是 Office Pro 2016(而不是 365 风格)。也许尝试更新您的 Office。
2赞 Jason Williams 11/28/2017 #28

Excel 通常将 csv 文件另存为 ANSI 编码,而不是 utf8。

更正文件的一个选项是使用记事本或记事本++:

  1. 使用记事本或记事本++打开 .csv。
  2. 将内容复制到计算机剪贴板。
  3. 从文件中删除内容。
  4. 将文件的编码更改为 utf8。
  5. 将内容从剪贴板粘贴回去。
  6. 保存文件。

评论

0赞 Felk 3/6/2018
不确定NP++的旧版本,但在当前版本中,您可以选择编码>转换为UTF-8。替换步骤 2-5
3赞 Krish 1/30/2018 #29

我也遇到过同样的问题,但有一个简单的解决方案。

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

它运行良好,并生成一个 csv 文件,可以在任何软件中导入。我在我的SQLITE数据库中导入了这个csv文件,它与所有Unicode字符完美配合。

评论

0赞 Don Cruickshank 9/19/2018
此选项在我的 Excel 2016 副本中不可用。您使用的是 Office 365 版本吗?
16赞 Chloe 6/2/2018 #30

使用记事本++

这将修复 Excel 保存的损坏的 CSV 文件,并以正确的编码重新保存。

  • 从 Excel 导出 CSV
  • 加载到记事本++
  • 修复编码

Excel 保存在 CP-1252 / Windows-1252 中。在 Notepad++ 中打开 CSV 文件。选择

Encoding > Character Sets > Western European > Windows-1252

然后

Encoding > Convert to UTF-8
File > Save

首先告诉Notepad++编码,然后转换。其中一些其他答案是在没有先设置正确编码的情况下进行转换,从而进一步破坏了文件。他们会把应该的东西变成.如果你的角色不适合CP-1252,那么当它被保存为CSV时,它已经丢失了。为此使用另一个答案。

评论

0赞 Daniel Maurer 7/26/2018
我可能会弄错,但您不能在记事本++中将文件另存为“.csv”,这就是它的意义所在。
1赞 Chloe 7/27/2018
是的你可以。您只是保存一个文本文件,并且是一个文本文件。此答案将打开被Excel损坏的CSV文件,修复它,然后使用正确的编码重新保存它。.csv
0赞 thymaro 5/26/2020
你所传达的内容具有深远的影响。采用这种杰出的方法,我们可以获得更高的数据质量!太棒了!(测验:为什么这个评论如此令人费解?