Excel到CSV的UTF8编码

我有一个Excel文件,其中有一些西班牙字符(波浪号等),我需要将其转换为CSV文件作为导入文件使用。然而,当我将另存为CSV时,它会破坏不是ASCII字符的“特殊”西班牙字符。它似乎也这样做的左右引号和长破折号,似乎是来自最初的用户在Mac中创建Excel文件。

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

863843 次浏览

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

在“另存为…”对话框中,单击“格式选项”可获得CSV的不同编码。LibreOffice的工作原理和AFAIK一样。

calc save dialog

一个简单的解决方法是使用谷歌电子表格。粘贴(只有当您有复杂公式时才使用值)或导入工作表,然后下载CSV。我只是试了几个字符,效果相当不错。

注意:谷歌表在导入时有限制。看到# EYZ0。

注意:小心使用谷歌表的敏感数据。

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

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

在顶部菜单选择: Encoding ->转换为Ansi

另一个我觉得有用的: “数字”在保存为CSV时允许编码设置

我无法在Mac Excel上找到这个问题的VBA解决方案。似乎根本没有办法输出UTF-8文本。

所以我最终不得不放弃VBA,咬紧牙关,学习了AppleScript。情况远没有我想的那么糟。

解决方案如下: # EYZ0 < / p >

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

“nevets1219”是正确的谷歌文档,然而,如果你只是“导入”文件,它通常不会将其转换为UTF-8。

但是如果您将CSV导入到现有的谷歌电子表格中,它会转换为UTF-8。

下面是一个食谱:

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

生成的文件将是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单元格限制)。

另一种方法是在记事本中打开UTF-8 CSV文件,它将正确显示。 然后将所有的“,”替换为制表符。 将所有这些粘贴到一个新的excel文件中

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

Microsoft Excel提供了一个使用Unicode编码导出电子表格的选项。请看下面的截图。

enter image description here

您可以将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),它将无法处理西班牙字符。

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

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

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

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

  3. 在目标应用程序中导入*.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中。

对于那些有崇高的文本:保存编码utf-16 LE与BOM应该这样做;-)

(在Mac上:)从Excel保存为CSV文件。在TextWrangler中打开CSV文件(免费)并使用“另存为”。在保存对话框中选择Unicode (UTF-8)。完成

(我猜你也可以用TextEdit做到这一点-如果你玩打开和保存设置。尝试打开文件:自动,保存文件:UTF-8)

做到这一点的唯一“简单方法”如下。首先,要意识到Excel .csv文件中显示的内容和隐藏的内容之间是有区别的。

  1. 打开一个Excel文件,其中包含信息(.xls, .xlsx)
  2. 在Excel中,选择“CSV(逗号分隔)(*. CSV)”作为文件类型,并保存为该类型。
  3. 在记事本中(在“程序”和“开始菜单”中的“附件”下找到),打开记事本中保存的.csv文件
  4. 然后选择->另存为…在“另存为”框的底部,有一个标记为“编码”的选择框。选择UTF-8(不要使用ANSI,否则你会失去所有的重音等)。选择UTF-8后,将文件保存为与原始文件略有不同的文件名。

该文件采用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)。然后使用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 {}

这是一种非常非常迂回的方法,但这是我发现的最可靠的方法。

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

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和谷歌文档

  1. 将文件保存为“Unicode文本文件”;
  2. 现在您有了一个unicode文本文件
  3. 用“记事本”打开它,并选择“utf-8”或“另存为”它 您想要的其他代码页
  4. 重命名文件扩展名为“txt”为“csv”。这将生成一个以制表符分隔的UTF-8 csv文件。
  5. 如果您想要一个以# eyz3分隔的文件,打开刚刚重命名的csv文件并用逗号替换所有制表符。要在win10的记事本中做到这一点,只需选择一个选项卡字段,然后单击Ctrl+H。在打开的窗口中,在“Replace with”字段中键入逗号,,然后单击“Replace All”。保存文件。结果将是一个以逗号分隔的UTF-8 csv文件。

无论如何不要用MS-Office打开它!! 现在您有了一个以制表符分隔的CSV文件。 或者,如果应用步骤5,则使用逗号分隔

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

在Office 365中,选择另存为;以前可能会选择CSV(逗号分隔),现在可以保存为CSV UTF-8(逗号分隔)(*.csv)

Excel通常将csv文件保存为ANSI编码,而不是utf8编码。

更正文件的一个选项是使用Notepad或notepad++:

  1. 使用Notepad或notepad++打开.csv文件。
  2. 复制内容到你的电脑剪贴板。
  3. 从文件中删除内容。
  4. 将文件的编码更改为utf8。
  5. 将剪贴板上的内容粘贴回来。
  6. 保存文件。

我也遇到过同样的问题,但有一个简单的解决方案。

  1. 在Excel 2016或更高版本中打开xlsx文件。
  2. 在“另存为”中选择此选项:"(CSV UTF-8(逗号分隔)*.csv)"

它工作完美,并生成一个csv文件,可以导入到任何软件。我在我的SQLITE数据库中导入了这个csv文件,它与所有unicode字符完好无损地完美工作。

使用记事本+ +

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

  • 从Excel导出CSV
  • 加载到notepad++
  • 解决编码
  • 保存

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

Encoding > Character Sets > Western European > Windows-1252

然后

Encoding > Convert to UTF-8
File > Save

首先告诉记事本++编码,然后转换。有些其他答案在转换时没有先设置正确的编码,这会使文件更加混乱。他们会把变成。如果您的字符不符合CP-1252,那么它在保存为CSV时就已经丢失了。用另一个答案。