我有一个Excel文件,其中有一些西班牙字符(波浪号等),我需要将其转换为CSV文件作为导入文件使用。然而,当我将另存为CSV时,它会破坏不是ASCII字符的“特殊”西班牙字符。它似乎也这样做的左右引号和长破折号,似乎是来自最初的用户在Mac中创建Excel文件。
由于CSV只是一个文本文件,我确信它可以处理UTF8编码,所以我猜这是Excel的限制,但我正在寻找一种方法,从Excel到CSV,并保持非ascii字符完整。
我发现OpenOffice的电子表格应用程序Calc非常擅长处理CSV数据。
在“另存为…”对话框中,单击“格式选项”可获得CSV的不同编码。LibreOffice的工作原理和AFAIK一样。
一个简单的解决方法是使用谷歌电子表格。粘贴(只有当您有复杂公式时才使用值)或导入工作表,然后下载CSV。我只是试了几个字符,效果相当不错。
注意:谷歌表在导入时有限制。看到# EYZ0。
注意:小心使用谷歌表的敏感数据。
编辑:另一种替代方法 -基本上他们使用VB宏或插件强制保存为UTF8。我没有尝试过这些解决方案,但它们听起来很合理。
“nevets1219”的第二个选项是在notepad++中打开CSV文件并将其转换为ANSI。
在顶部菜单选择: Encoding ->转换为Ansi
我无法在Mac Excel上找到这个问题的VBA解决方案。似乎根本没有办法输出UTF-8文本。
所以我最终不得不放弃VBA,咬紧牙关,学习了AppleScript。情况远没有我想的那么糟。
我使用了以下解决方案:Mac Exel 2008 >文件>另存为格式,然后在格式下使用MS_DOS逗号分隔(.csv)。完美的工作。
“nevets1219”是正确的谷歌文档,然而,如果你只是“导入”文件,它通常不会将其转换为UTF-8。
但是如果您将CSV导入到现有的谷歌电子表格中,它会转换为UTF-8。
下面是一个食谱:
生成的文件将是UTF-8格式的
Encoding -> Convert to Ansi将其编码为Ansi /UNICODE。Utf8是Unicode的一个子集。也许在ANSI中会正确编码,但在这里我们谈论的是UTF8, @SequenceDigitale。
还有更快的方法,比如导出为csv(逗号分隔),然后用notepad++(免费)打开csv,然后Encoding > Convert to UTF8。但前提是每个文件必须执行一次。如果你需要经常更改和导出,那么最好是LibreOffice或GDocs解决方案。
您可以在Unix下使用iconv命令(在Windows上也可以使用libiconv)。
在Excel下保存为CSV后,在命令行输入:
iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv
(记住用你的编码替换cp1250)。
工作快速和伟大的大文件,如邮政编码数据库,不能导入到GoogleDocs(400.000单元格限制)。
假设在Windows环境中,像往常一样在Excel中保存和使用文件,然后在Gnome Gnumeric中打开保存的Excel文件(免费)。保存Gnome Gnumeric的电子表格为CSV -对我来说-保存为UTF-8 CSV。
Microsoft Excel提供了一个使用Unicode编码导出电子表格的选项。请看下面的截图。
您可以将excel保存为unicode文本,它是制表符分隔的。
excel
unicode
open .csv fine with notepad++。如果你看到你的编码是好的(你看到所有字符,因为他们应该)按编码,然后转换为ANSI Else -找出您当前的编码
我知道这是一个老问题,但我碰巧在与OP同样的问题作斗争时遇到了这个问题。
没有发现任何提供的解决方案是可行的选择,我开始探索是否有一种方法可以只使用Excel来做到这一点。
幸运的是,我发现丢失字符的问题只发生(在我的情况下)从xlsx格式保存到csv格式。我尝试先将xlsx文件保存到xls,然后再保存到csv。它确实起作用了。
请试一试,看看对你是否有用。祝你好运。
另一个解决方案是用winword打开文件,并将其另存为txt,然后用excel重新打开,它将工作ISA
简单的方法:下载open office (在这里),加载电子表格并打开excel文件(.xls或.xlsx)。然后将其保存为文本CSV文件,然后打开一个窗口,询问是保持当前格式还是保存为. odf格式。选择“保持当前格式”,并在新窗口中选择更适合您的选项,根据您的文件被写入的语言。对于西班牙语,选择西欧(Windows-1252/ WinLatin 1)和文件工作正常。如果您选择Unicode (UTF-8),它将无法处理西班牙字符。
.xls
.xlsx
Windows-1252/ WinLatin 1
UTF-8
将xls文件(Excel文件)保存为Unicode text=>文件将保存为文本格式(.txt)
将格式从.txt更改为.csv(将文件从xyz .txt重命名为xyz .csv
将Excel表格保存为“Unicode Text (.txt)”。好消息是所有的国际字符都是UTF16(注意,不是UTF8)。但是,新的“*.txt”文件是TAB分隔符,而不是逗号分隔符,因此不是真正的CSV。
(可选)除非您可以使用制表符分隔的文件进行导入,否则请使用您最喜欢的文本编辑器并将制表符替换为逗号“,”。
在目标应用程序中导入*.txt文件。确保它可以接受UTF16格式。
如果UTF-16已经正确实现,并且支持非bmp代码点,那么您就可以将UTF-16文件转换为UTF-8而不会丢失信息。我把它留给你去寻找你最喜欢的方法。
我使用这个过程从Excel导入数据到Moodle。
对于那些寻找完全程序化(或者至少是服务器端)解决方案的人来说,我使用catdoc的xls2csv工具取得了巨大的成功。
安装catdoc:
apt-get install catdoc
进行转换:
xls2csv -d utf-8 file.xls > file-utf-8.csv
这是非常快的。
请注意,包含-d utf-8标志非常重要,否则它将使用默认的cp1252编码对输出进行编码,并且您将面临丢失信息的风险。
-d utf-8
cp1252
注意,xls2csv也只适用于.xls文件,它不适用于.xlsx文件。
xls2csv
使用Powershell怎么样?
Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
看起来很有趣,我发现将180MB的电子表格保存到UTF8 CSV文件中最简单的方法是将单元格选择到Excel中,复制它们,并将剪贴板的内容粘贴到SublimeText中。
对于那些有崇高的文本:保存编码utf-16 LE与BOM应该这样做;-)
(在Mac上:)从Excel保存为CSV文件。在TextWrangler中打开CSV文件(免费)并使用“另存为”。在保存对话框中选择Unicode (UTF-8)。完成
(我猜你也可以用TextEdit做到这一点-如果你玩打开和保存设置。尝试打开文件:自动,保存文件:UTF-8)
做到这一点的唯一“简单方法”如下。首先,要意识到Excel .csv文件中显示的内容和隐藏的内容之间是有区别的。
该文件采用UTF-8格式,保留所有字符和重音,可以导入,例如,MySQL和其他数据库程序。
这个答案来自这个论坛。
我也有同样的问题,遇到了这添加,它在excel 2013中工作得很好,除了excel 2007和2010,它是提到的。
保存对话框>工具按钮> Web选项>编码选项卡
我也遇到了同样的问题,于是谷歌了这篇文章。以上这些方法对我都没用。最后,我将我的Unicode .xls转换为.xml(选择另存为…XML电子表格2003),它产生了正确的字符。然后我编写代码来解析xml并提取内容供我使用。
我需要在我的Mac上自动化这个过程。我最初尝试使用mpowered建议的catdoc/xls2csv,但xls2csv在检测文档的原始编码时遇到了麻烦,并且不是所有的文档都是相同的。我最终所做的是将默认的网页输出编码设置为UTF-8,然后将文件提供给Apple的Automator,应用Convert Format of Excel Files操作将其转换为Web Page (HTML)。然后使用PHP, DOMDocument和XPath,我查询文档并将它们格式化为CSV。
catdoc/xls2csv
Convert Format of Excel Files
Web Page (HTML)
PHP
DOMDocument
XPath
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 {}
这是一种非常非常迂回的方法,但这是我发现的最可靠的方法。
我写了一个小的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)
你可以在没有第三方软件的现代Windows机器上做到这一点。这种方法是可靠的,它可以处理包含引号逗号、引号制表符、CJK字符等的数据。
1. 从Excel中保存
在Excel中,使用Unicode Text (*.txt)类型将数据保存到file.txt。
Unicode Text (*.txt)
file.txt
2. 开始PowerShell
从开始菜单中运行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
< >强简单的方法: 不需要Open office和谷歌文档
csv
Ctrl+H
,
无论如何不要用MS-Office打开它!! 现在您有了一个以制表符分隔的CSV文件。 或者,如果应用步骤5,则使用逗号分隔
在Excel 2016及更高版本(包括Office 365)中,有一个专门用于UTF-8格式的CSV选项。
在Office 365中,选择另存为;以前可能会选择CSV(逗号分隔),现在可以保存为CSV UTF-8(逗号分隔)(*.csv)
Excel通常将csv文件保存为ANSI编码,而不是utf8编码。
更正文件的一个选项是使用Notepad或notepad++:
我也遇到过同样的问题,但有一个简单的解决方案。
它工作完美,并生成一个csv文件,可以导入到任何软件。我在我的SQLITE数据库中导入了这个csv文件,它与所有unicode字符完好无损地完美工作。
这将修复Excel保存的损坏的CSV文件,并以适当的编码重新保存它。
Excel保存在CP-1252 / Windows-1252中。在notepad++中打开CSV文件。选择
Encoding > Character Sets > Western European > Windows-1252
然后
Encoding > Convert to UTF-8 File > Save
首先告诉记事本++编码,然后转换。有些其他答案在转换时没有先设置正确的编码,这会使文件更加混乱。他们会把’变成達。如果您的字符不符合CP-1252,那么它在保存为CSV时就已经丢失了。用另一个答案。
’
達