使用UTF8编码的Excel到CSV

Jef*_*ing 587 csv excel encoding utf-8

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

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

nev*_*219 396

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

注意:Google表格在导入时确实存在限制.看到这里.

注意:请注意Google表格中的敏感数据.

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

  • 也许Joel Slotsky(Excel的前任总理)可以向他们发送他在*绝对最低限度的每个软件开发人员,绝对必须知道的关于Unicode和字符集的绝对最低*的帖子(http://www.joelonsoftware.com/articles) /Unicode.html)? (62认同)
  • 使用正常的Windows记事本(使用另存为,然后在编码选项中选择utf-8)为我工作.对我而言,这对我来说是最好的方法,因为这必须由在他们的机器中没有管理员权限的用户完成,因此不需要安装其他软件. (8认同)
  • OpenOffice JustWorks(tm)没有麻烦 - 我认为应该包含它 (8认同)
  • 唔.我只是在背后颤抖.如果您的Excel文件有200,000行怎么办?或者包含您不希望包含在excel spreadheat中的敏感数据?如果需要,请使用Openoffice/Libreoffice. (8认同)
  • 如果文件大小很大怎么办?如果我没记错的话,Goolge表的大小限制在75M左右.我有一个文件是700M (2认同)

aen*_*rew 126

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

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

计算保存对话框

  • 与Google Docs和Excel相比,OpenOffice Calc在打开和保存"CSV"文件(字段分隔符,编码等)时有更多更好的选择.此外,Google Docs目前每个电子表格限制为400,000个单元格,而OpenOffice Calc则没有. (17认同)
  • 我可以确认LibreOffice也有效:它在导出时提供了令人遗憾的缺少Excel的字符编码选项. (3认同)

elo*_*age 114

  1. 将Excel工作表另存为"Unicode文本(.txt)".好消息是所有国际字符都是UTF16(注意,不是UTF8).但是,新的"*.txt"文件是以TAB分隔的,而不是逗号分隔的,因此不是真正的CSV.

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

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

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

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

  • *"好消息是所有的国际角色都是UTF16(注意,不是UTF8)."*:**完全废话**.UTF-8和UTF-16是编码整个Unicode代码点集的两种方法. (6认同)
  • 最后一些有用的东西!在Excel 2013上尝试上述Excel选项但没有成功.当我解析它时,我只是切换到使用\ t作为拆分字符,它完美无缺! (5认同)
  • @OskarLimka:当你说"UTF"时,你的意思是UTF-8还是UTF-16?因为微软确实使用了UTF-16. (4认同)
  • 谢谢.这是有道理的.为什么MS仍然拒绝使用UTF作为标准打败我. (3认同)

小智 42

我知道这是一个古老的问题,但我碰巧遇到了与OP一样的问题.

没有找到任何提供的解决方案是一个可行的选择,我开始发现是否有办法只使用Excel来做到这一点.

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

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

  • 快速确认 - 使用此方法生成的文件(Excel for Mac 2011)**不生成UTF-8 csvs,**但是**它们确实生成至少包含正确字符的CSV,因此可以**在文本编辑器**中无痛地转换为UTF8,这是Excel默认情况下Excel出来的可笑的破烂垃圾向前迈出的一大步. (12认同)
  • 对我来说,在Excel for Mac 2011上,这是有效的,但前提是我选择`Windows逗号分隔(CSV)`.如果我使用默认或DOS CSV选项,则它不起作用 - 这两个选项都用随机垃圾字符替换重音字符.测试了包括`é`,`è`,`â的字符......不知道它是否是真正的UTF8,但字符没有被破坏. (3认同)

小智 36

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

在命令行中以Excel格式保存为CSV后:

iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv
Run Code Online (Sandbox Code Playgroud)

(记得用你的编码替换cp1250).

对于像邮政编码数据库这样的大文件而言,它可以快速而有效地工作,这些文件无法导入到GoogleDocs(400.000个单元格的限制).

  • 如果您的内容包含无法在1250中编码的字符,则无用,更好的方法是在Excel中导出为"Unicode .txt"并使用iconv从Utf16转换.也许做一个'sed`或`tr`从'\ t'翻译成',' (5认同)
  • 保存为CSV或MS-DOS CSV时,Excel的默认编码似乎是CP858;当保存为Windows CSV时,Excel的默认编码似乎是Windows 1252(在Excel for Mac 2011上测试). (5认同)
  • 我完全同意这是无用的,因为当Excel以.csv格式保存时,当涉及无法以每个代码点编码的单字节编码进行编码的Unicode代码点时,它会丢失信息. (4认同)

Nic*_*ick 25

这样做的唯一"简单方法"如下.首先,要意识到Excel .csv文件中显示的内容与隐藏的内容之间存在差异.

(1)打开一个Excel文件,其中包含信息(.xls,.xlsx)

(2)在Excel中,选择"CSV(逗号分隔)(*.csv)作为文件类型并保存为该类型.

(3)在NOTEPAD中(在"程序"下找到,然后在"开始"菜单中找到"附件"),在记事本中打开保存的.csv文件

(4)然后选择 - >另存为..在"另存为"框的底部,有一个标记为"编码"的选择框.选择UTF-8(不要使用ANSI或丢失所有重音等).选择UTF-8后,将文件保存为与原始文件略有不同的文件名.

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

这个答案来自这个论坛.

  • 这是不正确的,因为步骤2,保存为CSV.这样做的问题是Excel将CSV文件保存在cp1252中,这是一个每个代码点一个字节的编码.这导致丢失不能适合一个字节的字符的信息. (8认同)
  • 有没有尝试在记事本中保存650MB的文档? (2认同)

Don*_*ank 23

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

1.从Excel保存

在Excel中,将数据保存为file.txt使用类型Unicode Text (*.txt).

2.启动PowerShell

powershell从"开始"菜单运行.

3.在PowerShell中加载文件

$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode
Run Code Online (Sandbox Code Playgroud)

4.将数据保存为CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

  • 这种方法非常适用于超过 15,000 条记录的 CSV 文件,行数超过了记事本强加的 1024 个字符限制。只需几秒钟,并且不使用第三方软件。谢谢! (2认同)

小智 21

另一个我发现有用的:" Numbers "允许在保存为CSV时进行编码设置.

  • ^它是Mac OSX中的应用程序 (8认同)

Red*_*eti 14

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

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

这是一个食谱:

  • 在主文档(或驱动器)屏幕上,单击"创建"按钮并选择"电子表格"
  • 从"文件"菜单中选择"导入"
  • 点击"选择文件"
  • 选择"替换电子表格"
  • 选择您用作分隔符的任何字符
  • 点击"导入"
  • 从"文件"菜单中选择"下载为" - > CSV(当前表)

生成的文件将以UTF-8格式显示

  • 这个答案的问题在于您首先如何生成CSV文件.如果您通过在Excel中简化保存为CSV来执行此操作,则CSV文件将位于cp1252中,这是一个每个代码点一个字节的编码.当涉及到不适合一个字节的字符时,这将导致信息丢失. (2认同)

Chl*_*loe 11

使用Notepad ++

这将修复Excel保存的损坏的CSV文件,并以适当的编码重新保存.

  • 从Excel导出CSV
  • 加载到Notepad ++
  • 修复编码
  • 保存

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

Encoding > Character Sets > Western European > Windows-1252
Run Code Online (Sandbox Code Playgroud)

然后

Encoding > Convert to UTF-8
File > Save
Run Code Online (Sandbox Code Playgroud)

首先告诉Notepad ++编码,然后转换.这些其他答案中的一些是在没有首先设置正确的编码的情况下进行转换,甚至更多地修改文件.他们会变成应该是什么?.如果您的角色不适合CP-1252,那么当它保存为CSV时它已经丢失.使用另一个答案.


mpo*_*red 8

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

安装catdoc:

apt-get install catdoc
Run Code Online (Sandbox Code Playgroud)

做转换:

xls2csv -d utf-8 file.xls > file-utf-8.csv 
Run Code Online (Sandbox Code Playgroud)

这是非常快的.

请注意,包含该-d utf-8标志很重要,否则它将以默认cp1252编码对输出进行编码,并且存在丢失信息的风险.

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

  • 我知道这很不幸,但事实是这个答案*会导致某些用户出现问题.事实上,你只使用适合cp1252的字符来运行它是幸运的,你在答案中没有提供关于这种风险的警告,你只是说它"毫无障碍地工作".你没有被要求解决每个人的问题,只有OP,很多人都有. (2认同)

小智 7

那么使用Powershell呢?

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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

  • 您应该提供一些有关如何使用该选项的说明。 (2认同)
  • @Jean-ClaudeArbaut 奇怪,我在 Excel 2016 中没有看到 UTF-8 CSV 选项。 (2认同)

Sol*_*van 6

最简单的方法: 无需Open Office和Google文档

  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,则以逗号分隔。

  • 对于制表符分隔的文件,最好使用.txt扩展名。`csv`,即逗号分隔的文件,只是令人困惑。 (2认同)

osc*_*car 5

正如有趣,因为它可能看起来,我发现我的180MB表格保存成UTF8 CSV文件的最简单的方法是选择单元格到Excel中,复制他们到剪贴板到SublimeText的内容粘贴.