使用UTF8编码的Excel到CSV

我有一个Excel文件,有一些西class牙文字符(撇号等),我需要转换为一个CSV文件作为导入文件使用。 但是,当我做另存为CSV时,它将损坏不是ASCII字符的“特殊”西class牙字符。 它也似乎用左右引号和长破折号,似乎来自在Mac中创buildExcel文件的原始用户。

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

一个简单的解决方法是使用Google Spreadsheet。 粘贴(仅当您有复杂的公式时才会显示值)或导入图纸,然后下载CSV。 我只是尝试了几个字符,它工作得很好。

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

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

编辑: 另一种select – 基本上他们使用VBmacros或插件强制保存为UTF8。 我还没有尝试过任何这些解决scheme,但他们听起来很合理。

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

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

calc保存对话框

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

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

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

如果UTF-16已经正确地实现了对非BMP代码点的支持,那么你可以在不丢失信息的情况下将UTF-16文件转换为UTF-8。 我把它留给你find你最喜欢的方法。

我使用这个过程将数据从Excel导入到Moodle。

我知道这是一个古老的问题,但是我碰到这个问题的同时,也遇到了和OP一样的问题。

没有find任何提供的解决scheme一个可行的select,我着手发现是否有办法做到这一点,只是使用Excel。

幸运的是,我发现当从xlsx格式保存为csv格式时,丢失的字符问题才发生(在我的情况下)。 我试着先保存xlsx文件到xls,然后再保存到csv。 它实际上工作。

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

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

在Excel下保存为CSV后,在命令行中input:

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

(记得用你的编码replacecp1250)。

适用于邮政编码数据库等大文件,无法导入到GoogleDocs(限于400.000个单元格)。

这样做的唯一“简单的方法”如下。 首先认识到显示内容与隐藏在Excel .csv文件中的内容是有区别的。

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

(2)在Excel中,select“CSV(逗号分隔)(* .csv)”作为文件types并保存为该types。

(3)在记事本(在“开始”菜单的“程序”和附件中find),在记事本中打开保存的.csv文件

(4)然后select – >另存为…,并在“另存为”框的底部有一个标记为“编码”的select框。 selectUTF-8(不要使用ANSI或你失去所有口音等)。 selectUTF-8后,将文件保存为与原文略有不同的文件名。

这个文件是UTF-8格式的,保留所有的字符和重音,可以导入到MySQL和其他数据库程序中。

这个答案是来自这个论坛 。

另一个我发现有用的:“ 数字 ”允许保存为CSV时的编码设置。

“nevets1219”是正确的关于谷歌文档,但是,如果你只是“导入”文件,它往往不会转换为UTF-8。

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

这是一个配方:

  • 在主文档(或驱动器)屏幕上,单击“创build”button并select“电子表格”
  • 从“文件”菜单中select“导入”
  • 点击“select文件”
  • select“replace电子表格”
  • select您用作分隔符的任何字符
  • 点击“导入”
  • 从“文件”菜单中select“下载为” – > CSV(当前表格)

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

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

1.从Excel保存

在Excel中,使用Unicode Text (*.txt)types将数据保存到file.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 

对于那些寻求完全程序化(至less是服务器端)解决scheme的人来说,使用catdoc的xls2csv工具已经取得了巨大的成功。

安装catdoc:

 apt-get install catdoc 

做转换:

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

这是快速的。

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

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

那么使用Powershell呢?

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

我无法在Mac Excel上find此问题的VBA解决scheme。 似乎没有办法输出UTF-8文本。

所以我终于不得不放弃VBA,咬紧牙关,学习了AppleScript。 这并不像我想象的那么糟糕。

解决scheme在这里描述: http : //talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html

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

简单的方法:下载开放式办公室( 这里 ),加载电子表格并打开Excel文件( .xls.xlsx )。 然后将其保存为文本CSV文件,并打开一个窗口,询问是否保存当前格式或保存为.ODF格式。 select“保持当前格式”,然后在新窗口中根据您的文件写入的语言select更适合您的选项。 对于西class牙语select西欧( Windows-1252/ WinLatin 1 )和文件工作得很好。 如果您selectUnicode( UTF-8 ),则不会使用西class牙文字符。

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

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

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

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

在顶部菜单中select:编码 – >转换为Ansi

Microsoft Excel具有使用Unicode编码导出电子表格的选项。 看下面的截图。

在这里输入图像描述

最简单的方法: 不需要开放式办公室和谷歌文档

  1. 将文件保存为“Unicode文本文件”;
  2. 现在你有一个Unicode文本文件
  3. 打开“记事本”和“另存为”select“utf-8”或其他代码页,你想要的
  4. 将文件扩展名从“txt”重命名为“csv”

不要打开它与Ms-办公室无论如何! 现在你有一个制表符分隔的CSV文件。

我写了一个小的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) 

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

有更快的方法,如导出为CSV(逗号分隔),然后用Notepad ++(免费)打开该CSV,然后编码>转换为UTF8。 但是,只有当你必须为每个文件做一次。 如果您需要更改和导出频繁,那么最好的是LibreOffice或GDocs解决scheme。

用记事本++打开.csv。 如果你看到你的编码是好​​的(你应该看到所有的字符)按编码,然后转换为ANSI其他 – 找出你目前的编码

另一个解决scheme是通过winword打开文件并保存为TXT,然后通过Excel重新打开,它将工作ISA

遇到同样的问题,并出于这个职位。 以上都没有为我工作。 最后,我将Unicode .xls转换为.xml(selectSave as … XML Spreadsheet 2003),并生成了正确的字符。 然后我编写代码来parsingXML并提取内容供我使用。

我使用了以下解决scheme:Mac Exel 2008> file>另存为,然后在格式下使用MS_DOS逗号分隔(.csv)。 工作完美。

另一种方法是在记事本中打开UTF-8 CSV文件,它将正确显示。 然后用标签replace所有的“,”。 将所有这些粘贴到一个新的Excel文件中。

我有同样的问题,并遇到这个添加,并且在excel 2013和excel 2007和2010中提到它的工作非常好。

保存对话框>工具button> Web选项>编码选项卡

我需要在我的Mac上自动执行此过程。 我最初尝试使用catdoc/xls2csvbuild议的catdoc/xls2csv ,但是xls2csv在检测文档的原始编码方面遇到问题,并不是所有文档都是相同的。 我最终做的是将默认网页输出编码设置为UTF-8 ,然后将文件提供给Apple的Automator,应用Convert Format of Excel Files操作转换为Web Page (HTML) 。 然后使用PHPDOMDocumentXPath ,我查询文档并将其格式化为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 {} 

这是一个非常非常迂回的做法,但这是我find的最可靠的方法。

我使用了一个我在网上find的程序(不是我的,也没有功劳)。 但它的工作stream畅

https://www.dropbox.com/s/vllyvlv6rekd69v/CpConverter.exe?dl=0

 - Choose your file - select europ (windows) 1252 as source - select UNICODE UTF-8 as destination 

并点击运行

您可以导入到UTF8或导入UFT8文件,在Excel中pipe理它,然后以UTF8重新导出它