提问人:Jeff Treuting 提问时间:11/19/2010 最后编辑:Jeff Treuting 更新时间:10/27/2019 访问量:881227
Excel 转 CSV 与 UTF8 编码 [已关闭]
Excel to CSV with UTF8 encoding [closed]
问:
这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。
3年前关闭。
我有一个 Excel 文件,其中包含一些西班牙语字符(波浪号等),我需要将其转换为 CSV 文件以用作导入文件。但是,当我执行另存为 CSV 时,它会破坏不是 ASCII 字符的“特殊”西班牙语字符。它似乎也使用左右引号和长破折号来做到这一点,这些短划线似乎来自在 Mac 中创建 Excel 文件的原始用户。
由于 CSV 只是一个文本文件,我确信它可以处理 UTF8 编码,所以我猜这是 Excel 的限制,但我正在寻找一种从 Excel 到 CSV 并保持非 ASCII 字符完好无损的方法。
答:
我发现 OpenOffice 的电子表格应用程序 Calc 非常擅长处理 CSV 数据。
在“另存为...”对话框中,单击“格式选项”以获取CSV的不同编码。LibreOffice 的工作方式与 AFAIK 相同。
评论
一个简单的解决方法是使用 Google 电子表格。粘贴(仅当您有复杂公式时才有值)或导入工作表,然后下载 CSV。我只是尝试了几个字符,效果很好。
注意:Google 表格在导入时确实有限制。请看这里。
注意:小心使用 Google 表格处理敏感数据。
编辑:另一种选择 - 基本上他们使用 VB 宏或插件来强制另存为 UTF8。我没有尝试过这些解决方案中的任何一种,但它们听起来很合理。
评论
“nevets1219”的第二个选项是在 Notepad++ 中打开 CSV 文件并转换为 ANSI。
在顶部菜单中选择: 编码 -> 转换为 ansi
评论
我发现另一个很有用: “Numbers”允许在另存为 CSV 时进行编码设置。
评论
我无法在Mac Excel上找到此问题的VBA解决方案。似乎根本没有办法输出 UTF-8 文本。
因此,我最终不得不放弃VBA,咬紧牙关,学习AppleScript。它并不像我想象的那么糟糕。
解决方案描述如下: http://talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html
“nevets1219”对 Google 文档是正确的,但是如果您只是“导入”文件,它通常不会将其转换为 UTF-8。
但是,如果您将 CSV 导入现有的 Google 电子表格,它确实会转换为 UTF-8。
这里有一个食谱:
- 在文档(或云端硬盘)主屏幕上,点击“创建”按钮,然后选择“电子表格”
- 从“文件”菜单中选择“导入”
- 点击“选择文件”
- 选择“替换电子表格”
- 选择您用作分隔符的任何字符
- 点击“导入”
- 从“文件”菜单中选择“下载为”-> CSV(当前工作表)
生成的文件将采用 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 个单元格限制)。
评论
sed
tr
假设是 Windows 环境,像往常一样在 Excel 中保存和处理文件,然后在 Gnome Gnumeric 中打开保存的 Excel 文件(免费)。将 Gnome Gnumeric 的电子表格保存为 CSV,对我来说,它保存为 UTF-8 CSV。
Microsoft Excel 可以选择使用 Unicode 编码导出电子表格。请参阅以下屏幕截图。
评论
使用记事本++打开.csv。如果你看到你的编码很好(你看到所有字符都应该是),按编码,然后转换为 ANSI else - 找出您当前的编码
评论
我知道这是一个老问题,但我碰巧遇到了这个问题,同时与 OP 相同的问题。
没有发现任何提供的解决方案是可行的选择,我开始发现是否有一种方法可以仅使用 Excel 来做到这一点。
幸运的是,我发现只有在从 xlsx 格式保存为 csv 格式时才会发生字符丢失问题(在我的情况下)。我尝试先将 xlsx 文件保存到 xls,然后再保存到 csv。它确实奏效了。
请试一试,看看它是否适合您。祝你好运。
评论
Windows comma separated (CSV)
é
è
â
另一种解决方案是通过winword打开文件并将其保存为txt,然后通过excel重新打开它,它将工作ISA
简单的方法:下载 Open Office(此处),加载电子表格并打开 excel 文件(或)。然后,只需将其另存为文本 CSV 文件,就会打开一个窗口,要求保留当前格式或另存为 .ODF 格式。选择“保留当前格式”,然后在新窗口中根据文件编写的语言选择更适合您的选项。对于西班牙语,选择西欧(),文件就可以正常工作了。如果选择 Unicode (),则它不适用于西班牙语字符。.xls
.xlsx
Windows-1252/ WinLatin 1
UTF-8
评论
将 xls 文件(Excel 文件)保存为 Unicode text=>file 将保存为文本格式 (.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 文件中显示的内容和隐藏的内容之间存在差异。
- 打开包含信息的 Excel 文件(.xls、.xlsx)
- 在Excel中,选择“CSV(逗号分隔)(*.csv)”作为文件类型并另存为该类型。
- 在记事本(在“程序”下找到,然后在“开始”菜单中的“附件”下找到),在记事本中打开保存的 .csv 文件
- 然后选择 -> 另存为...在“另存为”框的底部,有一个标记为“编码”的选择框。选择 UTF-8(不要使用 ANSI,否则会丢失所有口音等)。选择 UTF-8 后,将文件保存为与原始文件名略有不同的文件名。
此文件采用 UTF-8 格式,保留所有字符和重音,例如可以导入到 MySQL 和其他数据库程序中。
这个答案取自这个论坛。
评论
我有同样的问题并遇到了这个插件,它在 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] + " <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 中,使用类型 保存数据。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
Import-Csv ... | Export-Csv ...
$data
最简单的方法:无需打开办公室和谷歌文档
- 将您的文件另存为“Unicode 文本文件”;
- 现在您有一个 Unicode 文本文件
- 用“记事本”打开它,选择“utf-8”或“另存为” 所需的其他代码页
- 将文件扩展名从“TXT”重命名为“CSV”。这将生成一个制表符分隔的 UTF-8 csv 文件。
- 如果需要逗号分隔的文件,请打开刚刚重命名的文件,并将所有选项卡替换为逗号。要在 Win 10 上的记事本中执行此操作,只需选择一个选项卡字段,然后单击 。在打开的窗口中,在“替换为”字段中键入逗号,然后单击“全部替换”。保存您的文件。结果将是一个逗号分隔的 UTF-8 csv 文件。
csv
Ctrl+H
,
无论如何都不要用MS-Office打开它!! 现在,您有一个制表符分隔的 CSV 文件。或者,如果应用了步骤编号 5,则使用逗号分隔的逗号。
评论
.txt
csv
在 Excel 2016 及更高版本(包括 Office 365)下,有一个专用于 UTF-8 格式的 CSV 选项。
在 Office 365 中,执行“另存为”;以前可能选择了 CSV(逗号分隔),现在您可以保存为 CSV UTF-8(逗号分隔)(*.csv)的文件类型之一
评论
Excel 通常将 csv 文件另存为 ANSI 编码,而不是 utf8。
更正文件的一个选项是使用记事本或记事本++:
- 使用记事本或记事本++打开 .csv。
- 将内容复制到计算机剪贴板。
- 从文件中删除内容。
- 将文件的编码更改为 utf8。
- 将内容从剪贴板粘贴回去。
- 保存文件。
评论
我也遇到过同样的问题,但有一个简单的解决方案。
- 在 Excel 2016 或更高版本中打开 xlsx 文件。
- 在“另存为”中,选择此选项:“(CSV UTF-8(逗号分隔)*.csv)”
它运行良好,并生成一个 csv 文件,可以在任何软件中导入。我在我的SQLITE数据库中导入了这个csv文件,它与所有Unicode字符完美配合。
评论
使用记事本++
这将修复 Excel 保存的损坏的 CSV 文件,并以正确的编码重新保存。
- 从 Excel 导出 CSV
- 加载到记事本++
- 修复编码
- 救
Excel 保存在 CP-1252 / Windows-1252 中。在 Notepad++ 中打开 CSV 文件。选择
Encoding > Character Sets > Western European > Windows-1252
然后
Encoding > Convert to UTF-8
File > Save
首先告诉Notepad++编码,然后转换。其中一些其他答案是在没有先设置正确编码的情况下进行转换,从而进一步破坏了文件。他们会把应该的东西变成.如果你的角色不适合CP-1252,那么当它被保存为CSV时,它已经丢失了。为此使用另一个答案。’
達
评论
.csv
评论