我有一个包含一些西班牙语字符(波浪号等)的Excel文件,我需要将其转换为CSV文件以用作导入文件。 但是,当我执行“另存为CSV”时,它会处理不是ASCII字符的“特殊”西班牙字符。 这似乎也用左引号和右引号以及长破折号来完成,这些引号似乎来自在Mac中创建Excel文件的原始用户。
由于CSV只是一个文本文件,因此我确定它可以处理UTF8编码,因此我猜测它是Excel的局限性,但是我正在寻找一种方法,以将Excel转换为CSV并保留非ASCII字符完整。
“ nevets1219”与Google文档有关,但是,如果您仅“导入”文件,则该文件通常不会将其转换为UTF-8。
但是,如果将CSV导入到现有的Google电子表格中,则确实会转换为UTF-8。
这是一个食谱:
生成的文件将为UTF-8
编码->转换为Ansi将以ANSI / UNICODE对其进行编码。 Utf8是Unicode的子集。 也许在ANSI中会正确编码,但是在这里我们谈论的是UTF8 @SequenceDigitale。
有更快的方法,例如导出为csv(以逗号分隔),然后用Notepad ++(免费)打开该csv,然后编码>转换为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编码导出电子表格的选项。 请参阅以下屏幕截图。
用记事本++打开.csv。 如果您认为编码良好(可以看到所有字符,应该按一下),请按encoding,然后转换为ANSI-找出当前的编码是什么
我知道这是一个古老的问题,但是我碰巧遇到了这个问题,却遇到了与OP相同的问题。
尚未找到任何提供的解决方案的可行选择,我着手发现是否有一种方法可以仅使用Excel。
幸运的是,我发现丢失字符问题仅在从xlsx格式保存为csv格式时发生(就我而言)。 我尝试先将xlsx文件保存到xls,然后再保存到csv。 它确实有效。
请尝试一下,看看它是否适合您。 祝好运。
另一个解决方案是通过winword打开文件并将其另存为txt,然后通过excel重新打开它,它将可以运行ISA
简单的方法:下载开放式办公室( here ),加载电子表格并打开excel文件( .xls
或.xlsx
)。 然后将其另存为文本CSV文件,然后会打开一个窗口,要求保留当前格式或另存为.ODF格式。 选择“保留当前格式”,然后在新窗口中根据编写文件的语言选择最适合您的选项。 对于西班牙语,选择西欧( Windows-1252/ WinLatin 1
),文件运行正常。 如果选择Unicode( UTF-8
),它将无法使用西班牙字符。
将xls文件(Excel文件)另存为Unicode文本=>文件将以文本格式(.txt)保存
将格式从.txt更改为.csv(将文件从XYX.txt重命名为XYX.csv
将Excel工作表另存为“ Unicode文本(.txt)”。 好消息是,所有国际字符都使用UTF16(注意,不是UTF8)。 但是,新的“ * .txt”文件由TAB分隔,而不是逗号分隔,因此不是真正的CSV。
(可选)除非可以使用TAB分隔文件进行导入,否则请使用您喜欢的文本编辑器并将TAB字符替换为逗号“,”。
将* .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
编码对输出进行编码,并且存在丢失信息的风险。
请注意, xls2csv
也仅适用于.xls
文件,不适用于.xlsx
文件。
怎么样使用Powershell。
Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
尽管看起来很有趣,但我发现将180MB电子表格保存到UTF8 CSV文件中的最简单方法是将单元格选择到Excel中,将其复制并将其内容粘贴到SublimeText中。
唯一的“简便方法”如下。 首先,意识到在Excel .csv文件中显示的内容和隐藏的内容之间存在差异。
该文件采用UTF-8格式,并保留所有字符和重音符号,并且可以导入例如MySQL和其他数据库程序中。
这个答案来自这个论坛 。
我有同样的问题,遇到了这个 add in,它在excel 2013和excel 2007和2010中都可以正常工作。
保存对话框>工具按钮> Web选项>编码选项卡
遇到了同样的问题,并用谷歌搜索了这篇文章。 以上都不对我有用。 最后,我将Unicode .xls转换为.xml(选择另存为... XML Spreadsheet 2003),并生成了正确的字符。 然后,我编写了代码以解析xml并提取了供我使用的内容。
我写了一个小的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] + " [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
。
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
最简单的方法: 无需Open Office和Google文档
csv
文件,然后用逗号替换所有选项卡。 要在Win 10上的记事本中执行此操作,只需选择一个选项卡字段,然后单击Ctrl+H
。 在打开的窗口中,
在“替换为”字段中键入逗号,
然后单击“全部替换”。 保存文件。 结果将是逗号分隔的UTF-8 csv文件。 无论如何不要用MS-Office打开它!!! 现在,您有了制表符分隔的CSV文件。 或者,如果您应用了步骤5,则以逗号分隔。
我发现OpenOffice的电子表格应用程序Calc非常擅长处理CSV数据。
在“另存为...”对话框中,单击“格式选项”以获取CSV的不同编码。 LibreOffice的工作方式与AFAIK相同。
一个简单的解决方法是使用Google Spreadsheet。 粘贴(仅在您具有复杂公式时才有值)或导入工作表,然后下载CSV。 我只是尝试了几个字符,所以效果很好。
注意:导入时,Google表格确实有限制。 看这里 。
注意:请小心使用Google表格的敏感数据。
编辑: 另一种选择 -基本上,他们使用VB宏或加载项强制将其另存为UTF8。 我没有尝试过这些解决方案中的任何一种,但是听起来很合理。
在Excel 2016及更高版本(包括Office 365)下,有一个专用于UTF-8格式的CSV选项。
在Office 365中,另存为; 以前可能选择了CSV(逗号分隔),现在可以保存为CSV UTF-8(逗号分隔)(*。csv)的文件类型之一
Excel通常将csv文件保存为ANSI编码而不是utf8。
纠正文件的一种方法是使用记事本或记事本++:
我也遇到过同样的问题,但是有一个简单的解决方案。
它工作完美,并生成了一个csv文件,可以将其导入任何软件中。 我将此csv文件导入到我的SQLITE数据库中,它与所有Unicode字符完好无缺地完美结合。
“ nevets1219”的第二个选项是在Notepad ++中打开CSV文件并转换为ANSI。
在顶部菜单中选择:编码->转换为Ansi
这将修复Excel保存的损坏的CSV文件,并以正确的编码重新保存它。
Excel保存在CP-1252 / Windows-1252中。 在记事本++中打开CSV文件。 选择
Encoding > Character Sets > Western European > Windows-1252
然后
Encoding > Convert to UTF-8
File > Save
首先告诉Notepad ++编码, 然后进行转换。 这些其他答案中的一些正在转换而未先设置正确的编码,从而使文件更加混乱。 他们会变成应该是什么'
到達
。 如果您的角色不适合CP-1252,则将其另存为CSV时已丢失。 为此使用另一个答案。
我发现另一个有用:“ 数字 ”在另存为CSV时允许进行编码设置。
我无法在Mac Excel上找到针对此问题的VBA解决方案。 似乎根本没有办法输出UTF-8文本。
所以我最终不得不放弃VBA,硬着头皮学习了AppleScript。 并没有我想的那么糟。
解决方案的说明如下: http : //talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html