我有一个包含一些西班牙语字符(波浪号等)的Excel文件,我需要将其转换为CSV文件以用作导入文件。但是,当我执行“另存为CSV”时,它会处理不是ASCII字符的“特殊”西班牙字符。这似乎也用左引号和右引号以及长破折号来完成,这些引号似乎来自在Mac中创建Excel文件的原始用户。
由于CSV只是一个文本文件,因此我确定它可以处理UTF8编码,因此我猜测它是Excel的局限性,但我正在寻找一种从Excel转换为CSV并保留非ASCII字符的方法完整。
我有一个包含一些西班牙语字符(波浪号等)的Excel文件,我需要将其转换为CSV文件以用作导入文件。但是,当我执行“另存为CSV”时,它会处理不是ASCII字符的“特殊”西班牙字符。这似乎也用左引号和右引号以及长破折号来完成,这些引号似乎来自在Mac中创建Excel文件的原始用户。
由于CSV只是一个文本文件,因此我确定它可以处理UTF8编码,因此我猜测它是Excel的局限性,但我正在寻找一种从Excel转换为CSV并保留非ASCII字符的方法完整。
Answers:
一个简单的解决方法是使用Google Spreadsheet。粘贴(仅在您具有复杂公式时才有值)或导入工作表,然后下载CSV。我只是尝试了几个字符,所以效果很好。
注意:导入时,Google表格确实有限制。看这里。
注意:请小心使用Google表格的敏感数据。
编辑:另一种选择 -基本上,他们使用VB宏或插件来强制将其另存为UTF8。我没有尝试过这些解决方案中的任何一种,但是听起来很合理。
将Excel工作表另存为“ Unicode文本(.txt)”。好消息是,所有国际字符都使用UTF16(注意,不是UTF8)。但是,新的“ * .txt”文件由TAB分隔,而不是逗号分隔,因此不是真正的CSV。
(可选)除非可以使用TAB分隔文件进行导入,否则请使用自己喜欢的文本编辑器并将TAB字符替换为逗号“,”。
将* .txt文件导入目标应用程序。确保它可以接受UTF16格式。
如果已正确实现UTF-16并支持非BMP代码点,则可以将UTF-16文件转换为UTF-8而不会丢失信息。我将其留给您,以找到您最喜欢的方法。
我使用此过程将数据从Excel导入Moodle。
;
,然后使用默认的“文件字符集:utf-8”将txt文件导入phpmyadmin,格式为“ CSV”使用LOAD DATA”。所有编码均已正确传输。
我知道这是一个古老的问题,但是我碰巧遇到了这个问题,却遇到了与OP相同的问题。
尚未找到任何提供的解决方案的可行选择,我着手发现是否有一种方法可以仅使用Excel。
幸运的是,我发现丢失字符问题仅在从xlsx格式保存为csv格式时发生(就我而言)。我尝试先将xlsx文件保存到xls,然后再保存到csv。它确实有效。
请尝试一下,看看它是否适合您。祝好运。
Windows comma separated (CSV)
。如果我使用默认选项或DOS CSV选项,则无法使用-这两个选项都会用随机的垃圾字符替换重音字符。测试字符,包括é
,è
,â
...不知道,如果它是真实的UTF8但字符不缺胳膊少腿。
您可以在Unix下使用iconv命令(在Windows上也可以使用libiconv)。
在Excel中在命令行下另存为CSV后,放置:
iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv
(请记住用您的编码替换cp1250)。
对于大型文件(例如邮政编码数据库)无法快速导入到GoogleDocs(限制为400.000个单元格),效果非常好。
sed
或tr
从'\ t'到','的翻译
您可以在没有第三方软件的现代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
4.将数据另存为CSV
$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation
CHARACTER SET utf8mb4
按此处所述使用:stackoverflow.com/a/10959780/470749
唯一的“简便方法”如下。首先,意识到在Excel .csv文件中显示的内容和隐藏的内容之间存在差异。
该文件采用UTF-8格式,并保留所有字符和重音符号,并且可以导入例如MySQL和其他数据库程序中。
这个答案来自这个论坛。
我发现另一个有用:“ 数字 ”在另存为CSV时允许进行编码设置。
“ nevets1219”与Google文档有关,但是,如果您仅“导入”文件,则该文件通常不会将其转换为UTF-8。
但是,如果将CSV导入到现有的Google电子表格中,则确实会转换为UTF-8。
这是一个食谱:
生成的文件将为UTF-8
这将修复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
是一个文本文件。此答案将打开被Excel损坏的CSV文件,对其进行修复,然后以正确的编码重新保存。
在Excel 2016及更高版本(包括Office 365)下,有一个专用于UTF-8格式的CSV选项。
在Office 365中,执行“另存为”;以前可能选择了CSV(逗号分隔),而现在可以另存为CSV UTF-8(逗号分隔)(* .csv)的文件类型之一
对于那些寻求完全编程(或至少是服务器端)解决方案的用户,我在使用catdoc的xls2csv工具方面取得了巨大的成功。
安装catdoc:
apt-get install catdoc
做转换:
xls2csv -d utf-8 file.xls > file-utf-8.csv
速度很快。
请注意,包含-d utf-8
标记很重要,否则它将以默认值编码输出cp1252
编码编码,并且存在丢失信息的风险。
请注意,这xls2csv
也仅适用于.xls
文件,不适用于.xlsx
文件。
最简单的方法: 无需Open Office和Google文档
csv
刚重命名的文件,然后用逗号替换所有选项卡。要在Win 10上的记事本中执行此操作,只需选择一个选项卡字段,然后单击Ctrl+H
。在打开的窗口中,,
在“替换为”字段中键入逗号,然后单击“全部替换”。保存文件。结果将是一个以逗号分隔的UTF-8 csv文件。无论如何不要用MS-Office打开它!!! 现在,您有了制表符分隔的CSV文件。 或者,如果您应用了步骤5,则以逗号分隔。
.txt
扩展名。csv
,即以逗号分隔的文件,只是令人困惑。
尽管看起来很有趣,但我发现将180MB电子表格保存到UTF8 CSV文件中的最简单方法是将单元格选择到Excel中,将其复制并将其内容粘贴到SublimeText中。
我无法在Mac Excel上找到针对此问题的VBA解决方案。似乎根本没有办法输出UTF-8文本。
所以我最终不得不放弃VBA,硬着头皮学习了AppleScript。并没有我想的那么糟。
解决方案的说明如下:http : //talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html
我也遇到过同样的问题,但是有一个简单的解决方案。
它工作完美,并生成了一个csv文件,可以将其导入任何软件中。我将此csv文件导入到我的SQLITE数据库中,它与所有Unicode字符完好无缺地完美结合。
我写了一个小的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)
“ nevets1219”的第二个选项是在Notepad ++中打开CSV文件,然后转换为ANSI。
在顶部菜单中选择:编码->转换为Ansi
编码->转换为Ansi将以ANSI / UNICODE对其进行编码。Utf8是Unicode的子集。也许在ANSI中会正确编码,但是在这里我们谈论的是UTF8 @SequenceDigitale。
有更快的方法,例如导出为csv(以逗号分隔),然后用Notepad ++(免费)打开该csv,然后编码>转换为UTF8。但仅在每个文件必须执行一次时。如果您需要经常更改和导出,那么最好的方法是LibreOffice或GDocs解决方案。
保存对话框>工具按钮> Web选项>编码选项卡