我有一个Excel文件,其中包含一些西班牙语字符(tildes等),我需要将其转换为CSV文件以用作导入文件。但是,当我保存为csv时,它会管理不是ascii字符的"特殊"西班牙字符。这似乎也与左右引号和长破折号有关,这些引号和长破折号似乎来自于在Mac中创建Excel文件的原始用户。
因为csv只是一个文本文件,我相信它可以处理utf8编码,所以我猜这是一个excel限制,但我正在寻找一种从excel到csv的方法,并保持非ascii字符的完整性。
- stackoverflow.com/questions/155097/…。///
- 我在发布之前就看到了这个问题,但它是关于已经有了一个utf8 csv,并在excel中打开它,而不是相反。
- 下面的答案似乎有效,但它们只是解决方法。有人知道如何让Excel做到这一点吗?
- 我想放弃我的2分:经过多次尝试和错误,尝试使用vba函数等…(出于各种原因,我使用Excel 97)……只需保存为"csv(msdos)"格式,我就解决了这个问题。在我的例子中,Citrix网络研讨会(GoTowerBinar)的csv数据以字符结尾,从而在我们的结尾处破坏一些顶点代码-保存到"csv(msdos)"解决了我(以前)将csv导出加载到记事本+并将其粘贴到utf-8空白文件中并重新保存的问题。-P-:-)
- 这是一个非常烦人的Excel限制。我打开了一个有关此的用户语音功能请求:excel.uservoice.com/forums/…,请随意投票并实现它。
- 在我的语言中,Excel自动转换Unicode等价物(…,?)中的每个"…"或"oe"或"ae"。,&230;),但到了出口的时候,他喊道:"哦,天哪,这些字是什么??"说真的,微软……你在开玩笑吗?
- @Jefftreuting,这个itg.ias.edu/content/…为我工作。
- 根据Excel用户语音,微软上个月开始为.csv开发utf-8,excel.uservoice.com/forums/…
- Excel用户语音现在报告它将与Excel 16.0.7466.2023及更高版本一起提供。
- 仍然无法导出以制表符分隔的UTF-8。指定分隔符和编码的功能是开放式办公室多年前的一项功能。
一个简单的解决方法是使用谷歌电子表格。粘贴(仅当您有复杂的公式时才使用值)或导入工作表,然后下载csv。我刚试过几个角色,效果相当好。
注:Google工作表在导入时有限制。请看这里。
注意:使用谷歌表格时要小心敏感数据。
编辑:另一种选择-基本上他们使用vb宏或加载项强制另存为utf8。我没有尝试过这些解决方案,但它们听起来很合理。
- 谢谢!这是一个简单的解决方案,比与Excel抗争要好得多。
- 我首先尝试了记事本+,但这只在某些情况下有效。这工作得很出色。
- 添加了另一个可能的解决方案(未测试),无需使用谷歌电子表格。
- 也许JoelSlotsky(Excel的前PM)可以把他十年的帖子发到绝对最低限度,每个软件开发人员绝对,肯定要知道Unicode和字符集?
- 使用普通的Windows记事本(使用另存为,然后在编码选项中选择UTF-8)对我很有用。对我来说,这是最好的方法,因为这必须由在他们的机器上没有管理员权限的用户来完成,所以不需要安装额外的软件。
- OpenOffice JustWorks(tm)无需麻烦-我认为应该包括在内
- 我对OpenOffice没有经验,但Yessus已经提交了一些关于OpenOffice的内容-如果不是同一件事,您应该将其添加为答案。
- @Nevets1219我确实将csv导入了谷歌电子表格,但它没有影响我的性格问题。忘记Excel/Google和使用开放式Office Calc确实解决了我的utf8问题(顺便说一下,将我的csv作为"文本"插入Excel 2013也失败了)
- 嗯。我只是后背打了个寒颤。如果你的Excel文件有200000行呢?或者包含不希望包含在Excel电子表格中的敏感数据?如果需要,请使用openoffice/libreoffice。
- @SEB使用适合问题的解决方案。我很肯定谷歌电子表格可以处理大文件,如果你想的话,它们是私有的。如果本地应用程序可用的话,在这两种情况下都会做得更好。
- 我刚尝试过-仅供参考,您需要替换整个文件,而不是复制内容,因为Excel似乎破坏了文件的文本格式,而不是内容。不知道他们是怎么打破的,但谷歌的电子表格工作得很好,正如预期的那样。
- 这里是到jaimon的unicodecsv的直接链接:jaimommathew.wordpress.com/2011/08/23/…
- Google电子表格不允许您在导出时选择分隔符,因此如果导出csv,则需要使用逗号。
- csv为您提供逗号分隔符,文本为您提供制表符分隔符。但我相信你对定界符的看法是正确的。
- 如果文件太大怎么办?如果我没记错的话,goolge纸的尺寸限制在75米左右。我有一个档案是700米
- @博士,你是绝对正确的,我会加一个注释。
- @我是Joel Spolsky,不是Slotsky。他正好是StackOverflow的首席执行官!但谢谢你的文章。一本绝对非常好的书。:)
- 真的。。完美的工作……很好的解决方案……:)
我发现OpenOffice的电子表格应用程序calc非常擅长处理csv数据。
在"另存为…"对话框中,单击"格式选项"以获取csv的不同编码。Libreoffice的工作方式与Afaik相同。
- 我相信这是可行的,我只是没有碰巧已经有了OpenOffice,所以谷歌文档在我的情况下更容易。但是谢谢你的建议
- 在打开和保存"csv"文件(字段分隔符、编码等)时,OpenOffice Calc比Google Docs和Excel有更多更好的选项。此外,Google Docs目前每个电子表格最多只能有400000个单元格,而OpenOffice Calc则没有。
- 我可以确认libreoffice也可以工作:它在导出时提供了字符编码选项,但在Excel中却很糟糕。
- 对于那些处理敏感数据的人来说,这是一个很好的选择。OpenOffice套件可以是带锁定机器的便携式安装。
- 这是最好的答案。我总是要用OpenOffice来解决这类问题。
将Excel工作表另存为"Unicode文本(.txt)"。好消息是,所有国际字符都是UTF16(注意,不是UTF8)。但是,新的"*.txt"文件是制表符分隔的,而不是逗号分隔的,因此不是真正的csv。
(可选)除非您可以使用制表符分隔的文件进行导入,否则请使用您最喜爱的文本编辑器,并将制表符替换为逗号","。
在目标应用程序中导入您的*.txt文件。确保它可以接受UTF16格式。
如果在支持非BMP代码点的情况下正确实现了UTF-16,那么您可以将UTF-16文件转换为UTF-8,而不会丢失信息。我把它留给你去寻找你最喜欢的方法。
我使用此过程将数据从Excel导入Moodle。
- 终于有点效果了!在Excel 2013上尝试了上述Excel选项,但没有成功。我刚开始使用 作为分割字符,当我分析它时,它工作得很完美!
- 需要将XLS导出为CSV才能导入MySQL。使用Excel2003,我以"unicode文本(.txt)"格式导出,然后使用notepad++将选项卡替换为;,然后将txt文件导入phpmyadmin,默认为"文件的字符集:utf-8",格式为"csv使用加载数据"。所有编码传输正确。
- 对于较小的文件和简单的数据,我使用此快捷方式:选择要导出的区域或列,然后复制(ctrl+c)。然后转到我的文本编辑器(例如,Ubuntu中的gedit)并粘贴。文本编辑器以制表符分隔所有数据。然后保存为文本文件,通常为UTF8格式。最终的格式可能取决于您的文本编辑器配置。
- 这是我最好的解决方法!现在我可以通过phpmyadmin轻松导入导入文件了!
- 谢谢您。这是有道理的。为什么微软仍然拒绝使用UTF作为标准?
- 显然(2)有一个限制——如果任何列中有逗号(,),那么您必须引用该列。(或者国际选项是否引用所有列?)
- @奥斯卡:当你说"utf"时,你是指utf-8还是utf-16?因为微软确实使用了很多UTF-16。
- @flimm,我的意思是utf-8,我不太熟悉utf-16,因为在我的工作中,我需要与以前的ascii和iso-8859-1文件完全兼容。我不确定UTF-16在这方面是向后兼容的。
- 在我尝试此方法的文件中,有些字符转换为"tab"字符
- "好消息是所有的国际字符都是UTF16(注意,不是UTF8)。":完全是胡说八道。utf-8和utf-16是对整个Unicode代码点集进行编码的两种方法。
- @Kai Noack,如果你仍然在使用记事本+,你只需打开原始的非UTF-8csv,然后从菜单栏上的编码选项中更改编码(可能会节省你几个步骤)。
我知道这是一个古老的问题,但我在和OP的问题作斗争的时候,碰巧遇到了这个问题。
没有发现任何一个提供的解决方案是可行的选择,我开始发现是否有一种方法可以做到这一点,只是使用Excel。
幸运的是,我发现丢失字符的问题只在从XLSX格式保存到CSV格式时发生(在我的例子中)。我尝试先将XLSX文件保存到XLS,然后保存到CSV。它确实起作用了。
请试一试,看看是否适合你。祝你好运。
- 对我来说,在Mac2011的Excel上,这是可行的,但前提是我选择了Windows comma separated (CSV)。如果我使用默认或dos csv选项,它就不起作用了——这两个选项都用随机垃圾字符替换了重音字符。检测了é、è、â等性状。不知道它是不是真的utf8,但字符不会被破坏。
- 快速确认-在(Mac 2011的Excel)上使用此方法生成的文件不会生成UTF-8 CSV,但它们确实会生成至少包含正确字符的CSV,因此可以在文本编辑器中轻松转换为UTF8,这是从Excel默认吐出的可笑的损坏垃圾向前迈出的一大步。
- 是的,同意了,这对我也很有效(excel mac 2011),它真的应该得到更多的赞成票。
- 这对我来说不太管用(使用Excel2007)。我的文件中有两个非ASCII字符,其中一个保存得很好,另一个没有。
- 请注意,生成的csv文件将采用utf-16,而不是问题所问的utf-8。
- 这对我不起作用(Windows10,Excel2013)。
- 不适合我。(使用Excel 2013)。
您可以在Unix下使用iconv命令(在Windows上也可用作libiconv)。
在命令行的excel下保存为csv后,输入:
1
| iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv |
(记住用您的编码替换CP1250)。
对于像邮政编码数据库这样不能导入GoogleDocs的大文件(限制为400000个单元格),它的工作速度很快而且很好。
- 如果您的内容包含不能用1250编码的字符,那么最好的方法是在Excel中导出为"unicode.txt",并使用iconv从utf16转换。也可以做一个sed或tr来从't'翻译成','
- 当保存为csv或ms-dos csv时,Excel的默认编码似乎是cp858;当保存为windows csv时,则是windows 1252(在mac 2011的Excel上测试)。
- 我完全同意这是没用的,因为当Excel以.csv格式保存时,当涉及到不能以每码位一字节编码的Unicode码位时,它会丢失信息。
唯一的"简单方法"如下。首先,要意识到在excel.csv文件中显示的内容和隐藏的内容是有区别的。
(1)打开包含信息的Excel文件(.xls,.xlsx)
(2)在Excel中,选择"csv(逗号分隔)(*.csv)作为文件类型并另存为该类型。
(3)在记事本中(在"程序"下找到,然后在"开始"菜单中打开"附件"),在记事本中打开保存的.csv文件。
(4)然后选择->另存为..并在"另存为"框的底部有一个标记为"编码"的选择框。选择utf-8(不要使用ansi或丢失所有重音符号等)。选择utf-8之后,将文件保存到与原始文件稍有不同的文件名。
这个文件是UTF-8格式的,保留了所有字符和重音符号,可以导入到MySQL和其他数据库程序中。
此答案摘自本论坛。
- 这是不正确的,因为步骤2,另存为csv。问题在于Excel将csv文件保存在cp1252中,每个码位编码一个字节。这会导致无法容纳一个字节的字符的信息丢失。
- 有没有尝试过在记事本中保存650MB的文档?
- 这对我有用,但我不明白为什么。由javascript生成的文件在Excel中总是被错误读取(作为不同的编码)。但是当我在记事本中打开并另存为UTF-8时,它工作得很好!所以,看起来有一个使用编码的元数据。它是如何工作的?如果记事本可以保存utf-8csv文件,Excel可以读取这些文件,那么在我的程序中可以生成正确的utf-8csv文件,Excel可以读取这些文件吗?
- 我不小心投了反对票(随机点击),没注意到。现在我不能撤销它,除非你以某种方式编辑你的答案。请做一些编辑,这样我可以撤消意外的投票。
- 为我工作。在从Access转换的xslx中。音调符号、仅LF和ISO日期格式都可以。其中一个或另一个解决方案不适用于更流行的解决方案。
您可以在没有第三方软件的现代Windows计算机上执行此操作。此方法是可靠的,它将处理包括引号、带引号的制表符、CJK字符等的数据。
1。从Excel中保存
在Excel中,使用类型Unicode Text (*.txt)将数据保存到file.txt。
2。启动PowerShell
从开始菜单运行powershell。
三。在PowerShell中加载文件
1
| $data = Import-Csv C:\path\to\file.txt -Delimiter"`t" -Encoding BigEndianUnicode |
4。将数据保存为csv
1
| $data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation |
- 这种方法对于一个有15000多条记录的csv文件非常有效,其行数超过了记事本规定的1024个字符限制。只需几秒钟,不使用第三方软件。谢谢!
- 啊,即使当我尝试使用谷歌表单时,我也遇到了同样的问题。所以这个PowerShell策略可能会奏效。这是我的问题。对于某些字符(如某些emoji),您需要使用CHARACTER SET utf8mb4,如下所述:stackoverflow.com/a/10959780/470749
- @Ryan这个问题是MySQL特有的。我刚试过这个问题中的问题角色,它在Excel和PowerShell中都运行良好。
我发现另一个有用的:"数字"允许在保存为csv时进行编码设置。
- ^它是Mac OSX中的一个应用程序
- 同样要小心数字,因为它在行数上有限制,我已经转换了这样的数据,但还没有意识到它已经剪切了一些数据。excel/csv有更高的限制。
"nevets1219"对于google文档来说是正确的,但是如果你简单地"导入"文件,它通常不会将其转换为utf-8。
但是,如果将csv导入到现有的Google电子表格中,它确实会转换为utf-8。
这是一个食谱:
- 在主文档(或驱动器)屏幕上,单击"创建"按钮并选择"电子表格"
- 从"文件"菜单中选择"导入"
- 点击"选择文件"
- 选择"替换电子表格"
- 选择要用作分隔符的字符
- 单击"导入"
- 从"文件"菜单中选择"下载为"->csv(当前工作表)
结果文件将采用UTF-8格式。
- 这个答案的问题在于如何首先生成csv文件。如果您通过简化保存为Excel中的csv来实现这一点,则csv文件将采用cp1252格式,即每个码位编码一个字节。当涉及到不能容纳一个字节的字符时,这将导致信息丢失。
- 好吧,这些答案都有问题。对于如何转换为UTF-8有任何答案,因为无法知道或控制原始编码是什么。
- 一些答案确实谈到了如何解决这个问题,例如stackoverflow.com/a/15500052/247696
使用记事本+
这将修复Excel保存的损坏的csv文件,并以正确的编码重新保存。
- 从Excel导出csv
- 载入记事本++
- 固定编码
- 保存
Excel保存在CP-1252/Windows-1252中。在记事本+中打开csv文件。选择
1
| Encoding > Character Sets > Western European > Windows-1252 |
然后
1 2
| Encoding > Convert to UTF-8
File > Save |
首先告诉记事本++编码,然后转换。其中一些其他答案在转换时没有首先设置正确的编码,从而使文件更加混乱。他们会把应该是’的东西变成達。如果您的角色不适合CP-1252,那么它在保存为csv时已经丢失。用另一个答案。
- 我可能弄错了,但是你不能在记事本+中将文件保存为".csv",这就是问题所在。
- 是的,你可以。您只保存了一个文本文件,而.csv是一个文本文件。此答案将打开Excel损坏的csv文件,将其修复,然后用正确的编码重新保存。
- 最好(也是最简单)的解决方案…很有魅力。+ 1
对于那些寻求完全编程(或者至少是服务器端)解决方案的人,我已经成功地使用了CatDoc的XLS2csv工具。
安装CATDOC:
进行转换:
1
| xls2csv -d utf-8 file.xls > file-utf-8.csv |
这很快就烧起来了。
请注意,包含-d utf-8标志很重要,否则它将以默认的cp1252编码对输出进行编码,并且会有丢失信息的风险。
注意,xls2csv也只适用于.xls文件,不适用于.xlsx文件。
- 或者选择不同的输出编码,不能用一个答案来解决每个人的问题:-)
- 我知道这很不幸,但事实是这个答案会给一些用户带来问题。事实上,您只使用符合CP1252的字符来运行这个命令,这是很幸运的,您在答案中没有提供关于这个风险的警告,您只是说它"毫无障碍地工作"。你没有被要求去解决每个人的问题,只是操作,这是很多人分享的。
- 你看,我在答题栏里解决了这个问题,取消了投票。
使用PowerShell怎么样?
1
| Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8 |
- 非ASCII西班牙语字符的文本将从原来的西班牙语字符更改为ANSI使用的编码字符串。因此,文本将与原始文本不同。
最简单的方法:不需要开放式办公室和谷歌文档
将文件另存为"unicode文本文件";
现在您有了一个Unicode文本文件
用"记事本"和"另存为"打开它,选择"UTF-8"或您需要的其他代码页
将文件扩展名从"txt"重命名为"csv"。这将导致以制表符分隔的utf-8csv文件。
如果需要逗号分隔的文件,请打开刚才重命名的CSV文件,并用逗号替换所有选项卡。要在Win 10的记事本中执行此操作,只需选择一个选项卡字段,然后单击Ctrl+H。在打开的窗口中,在"替换为"字段中键入逗号,,然后单击"全部替换"。保存文件。结果将是一个逗号分隔的utf-8csv文件。
无论如何,不要用MS Office打开它!!!!现在您有了一个以制表符分隔的csv文件。或者,如果应用了步骤5,则用逗号分隔。
- 对于以制表符分隔的文件,最好使用.txt扩展名。csv,即逗号分隔的文件,只是令人困惑。
有趣的是,我发现将180MB电子表格保存到utf8 csv文件中最简单的方法是将单元格选择到Excel中,复制它们,并将剪贴板的内容粘贴到Sublimetext中。
- 这是因为Excel通过剪贴板提供所选内容的TSV版本。同样,你也可以使用记事本而不是Sublimetext,但是如果你这样做的话,记住用UTF-8编码保存。
在Excel2016中,我们有一个专门用于UTF-8格式的csv导出选项。
- 为什么投反对票?这是正确的。
- 您应该提供一些关于如何使用该选项的说明。
- @Dexgecko当然:它被称为"保存"按钮/菜单。在Windows的Excel 2016中,现在有四种csv导出类型:csv另存为"ansi"(或多或少相当于latin1,但这可能与非Western OS安装不同,我不确定),utf-8 csv另存为带BOM的utf-8,csv(dos)另存为cp850(同样,mais取决于安装?)csv(mac)保存为macroman。
- 但是,Excel只能读取utf-8和ansi csv文件(Excel可以使用BOM进行选择)。要从另一个编码导入,请重命名为.txt,从Excel打开(然后有一长串编码可供选择),由于无法正确解释分隔符,请使用"转换"按钮拆分行。当从不同的语言约定导入csv时,也可以使用此技巧(例如,在法语中,字段分隔符是分号,因为逗号已经用作十进制分隔符)。
- 有点OT,但无论如何:使用VBA更简单,因为您可以使用工作簿的origin参数。打开csv文件时打开。但这只适用于csv可用的少量编码。我们可以使用workbook.opentext,对于它,源代码可以是任何编码,唉,对于没有bom的utf-8编码的csv文件来说,这是行不通的!但是如果文件的扩展名是.txt,它就可以工作了!在我看来像个虫子。
- @Jean-Claudearbaut奇怪的是,我在我的Excel2016中没有看到一个utf-8csv选项。
- @德克斯基确实很奇怪。根据此页面(法语,抱歉),该功能于2016年11月在版本1610中添加。我现在有1802版。但是,我认为只有Office365有这种演变,我使用的是OfficePro 2016(不是365风格)。也许可以尝试更新你的办公室。
- @dexgecko对products.office.com的快速检查似乎表明专业的"一次性"版本已经不再销售了。我不知道像我这样有这种产品的人会发生什么。感谢您指出这一点!
我在Mac Excel上找不到这个问题的VBA解决方案。似乎根本无法输出UTF-8文本。
所以我终于放弃了vba,咬了一口子弹,学会了applescript。这并没有我想象的那么糟糕。
解决方案如下:http://talesoftech.blogspot.com/2011/05/excel-on-mac-再见-vba-hello.html
将XLS文件(Excel文件)保存为Unicode文本=>文件将以文本格式(.txt)保存。
将格式从.txt更改为.csv(将文件从xyx.txt重命名为xyx.csv
- 这不起作用,因为您的说明不包括在文件数据中将制表符转换为逗号的必要步骤。
- Excel的"Unicode文本"是UTF-16,而不是问题中要求的UTF-8。
假设使用Windows环境,在Excel中像往常一样保存并使用该文件,但在GNOME GNUMERIC(免费)中打开保存的Excel文件。将gnome gnumeric的电子表格保存为csv,不管怎样,它都将保存为utf-8csv。
我也遇到了同样的问题,但有一个简单的解决方法。
在Excel 2016或更高版本中打开XLSX文件。
在"另存为"中,选择此选项:"(csv utf-8(逗号分隔的)*.csv)"
它工作得很好,生成了一个可以导入任何软件的csv文件。我在我的sqlite数据库中导入了这个csv文件,它与所有unicode字符都是完整的。
- 此选项在我的Excel 2016副本中不可用。您使用的是Office 365版本吗?
简单的方法是:下载开放式Office(此处),加载电子表格并打开Excel文件(.xls或.xlsx)。然后将其保存为文本csv文件,并打开一个窗口,要求保留当前格式或另存为.odf格式。选择"保留当前格式",然后在新窗口中,根据文件所用的语言,选择适合您的选项。对于西班牙语,选择西欧(Windows-1252/ WinLatin 1),文件工作正常。如果选择unicode(UTF-8),它将不适用于西班牙语字符。
Excel通常将csv文件保存为ansi编码,而不是utf8。
更正文件的一个选项是使用记事本或记事本++:
用记事本或记事本+打开.csv。
将内容复制到计算机剪贴板。
从文件中删除内容。
将文件的编码改为utf8。
从剪贴板中粘贴内容。
保存文件。
- 不确定NP++的旧版本,但在当前版本中,您只需选择"编码>转换为UTF-8"。替换步骤2-5
- 这就是我一直在寻找的!谢谢
我已经编写了一个小的python脚本,可以用utf-8导出工作表。
您只需提供Excel文件作为第一个参数,然后提供要导出的工作表。如果不提供工作表,脚本将导出Excel文件中存在的所有工作表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #!/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) |
- 我对实现进行了一些更新,并创建了一个gist gist.github.com/julianthome/2d8546e7bed869079ab0f409ae0faa87
遇到了同样的问题,用谷歌搜索出了这篇文章。以上都不适合我。最后,我将unicode.xls转换为.xml(选择另存为…它产生了正确的字符。然后我编写代码来解析XML并提取内容供我使用。
"nevets1219"的第二个选项是在记事本++中打开csv文件,并进行到ansi的转换。
在顶部菜单中选择:编码->转换为ANSI
- 不知道你为什么被否决。记事本+是为我做的。无法将我的文件存储在谷歌电子表格中,因为它是机密文件。
- 这个答案的问题在于如何首先生成csv文件。如果只从Excel中保存为csv,则编码将为cp1252,即每个码位编码一个字节,因此将丢失不适合该编码的字符的信息。另外,在最后,如果您想做问题要求做的话,应该转换为UTF-8,而不是ANSI。
- 这是IMO迄今为止最简单的答案。我正在使用Excel2016,发现它默认保存为ANSI编码,但得到了UTF-8,这正是我想要的。
encoding->convert to ansi将以ansi/unicode编码。UTF8是Unicode的一个子集。也许在ANSI中编码是正确的,但这里我们讨论的是utf8,@sequencedigitale。
有更快的方法,比如导出为csv(逗号分隔),然后用记事本+打开csv(免费),然后编码>转换为utf8。但只有在每个文件都必须这样做的情况下。如果您需要频繁地更改和导出,那么最好是libreoffice或gdocs解决方案。
- "utf8是unicode的子集":这没有意义。UTF-8是Unicode编码。
- 我不确定我能找到这个"编码->转换为ANSI"选项。
- 只需在记事本++中使用ansi csv,并将文件的编码改为utf8,就可以将原来的非ascii西班牙语字符转换为与原始文本不匹配的编码字符串。
保存对话框>工具按钮>Web选项>编码选项卡
- 这对我不起作用。据我所知,它只在保存为Web格式(HTML等)时生效,而不是保存为CSV时生效。
- 这不适用于csv输出,
- 为我工作-Office 2007
Microsoft Excel可以选择使用Unicode编码导出电子表格。请参见以下屏幕截图。
- "unicode文本"以utf-16le(小endian)格式保存,而不是按op的要求以utf-8格式保存。
- 是的,但这是在Excel中获得x分隔值的Unicode支持的最佳方法。我有各种各样的问题想让Excel用UTF-8打球!多读
用记事本+打开.csv fine。如果您看到您的编码是好的(您看到所有字符应该是好的),请按"编码",然后转换为ANSI其他-找出您当前的编码方式
- 那对我有用……将dmysql db导出为csv并导入Excel时遇到希腊字符问题。
- 问题在于如何首先生成csv文件。如果只在Excel中保存为csv文件,它将以cp1252格式保存,每个码位编码一个字节,因此会丢失信息。
另一种解决方案是用Winword打开文件并将其保存为TXT,然后用Excel重新打开,它将工作于ISA。
我需要在我的Mac上自动化这个过程。我最初按照Mpowered的建议尝试使用catdoc/xls2csv,但xls2csv在检测文档的原始编码时遇到问题,并非所有文档都是相同的。我最后做的是将默认的网页输出编码设置为UTF-8,然后将文件提供给苹果的自动机,应用Convert Format of Excel Files操作转换为Web Page (HTML)。然后使用PHP、DOMDocument和XPath查询文档,并将它们格式化为CSV。
这是php脚本(process.php):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?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命令:
1
| find . -name '*.htm' | xargs -I{} php ./process.php {} |
这是一种非常,非常迂回的方法,但这是我发现的最可靠的方法。
我也遇到了同样的问题,并且遇到了这个插件,它在Excel2013中除了提到的Excel2007和2010外,工作得非常好。
对于那些拥有崇高文本的人:用编码utf-16le和bom保存应该可以做到;-)
- 不,因为utf-16和utf-8不一样,这就是问题所在。
- 好的,在Sublime上保存为UTF-8。它起作用了!TKS手册
(在Mac上):从Excel另存为csv文件。在textwrangler中打开csv文件(它是免费的)并使用"另存为"。在"保存"对话框中,选择"Unicode(UTF-8)"。多恩
(我想你也可以用textedit来做这个-如果你使用打开和保存设置的话。尝试打开文件:自动,保存文件:utf-8)
- 这个解决方案的问题是它有损耗。如果您的代码点不适合每个代码点编码一个字节,那么这些字符将在转换中丢失。
另一种方法是在记事本中打开utf-8csv文件,它将在其中正确显示。然后将所有""替换为制表符。将所有这些内容粘贴到新的Excel文件中。
- 问题是如何将Excel文件转换为UTF-8编码的csv文件。这个答案以utf-8编码的csv文件开始!
您可以将excel保存为unicode文本,它是以制表符分隔的。
- 不回答问题。
- 从某种意义上说,这是一个答案,它会导致一个以制表符分隔(而不是以逗号分隔)的文件,这是大多数人(包括我)都可以使用的文件。
- Excel中的"unicode文本"指的是utf-16,而不是utf-8,这就是问题所在。
- 这正是我的工作。对于大多数人来说,问题不是文件是否以UTF-8编码,而是"特殊"字符是否被保留。事实上,Excel在2016年没有做到这一点,这迫使我们跳过了难关。
我使用了以下解决方案:mac exel 2008>file>save as,然后在format下使用ms-dos逗号分隔(.csv)。工作完美。