关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 Stack Overflow 的主题。 2年前关闭。改进这个问题
我有一个 Excel 文件,其中包含一些西班牙字符(波浪号等),我需要将其转换为 CSV 文件以用作导入文件。但是,当我保存为 CSV 时,它会破坏不是 ASCII 字符的“特殊”西班牙字符。左右引号和长破折号似乎也来自在 Mac 中创建 Excel 文件的原始用户。
由于 CSV 只是一个文本文件,我确信它可以处理 UTF8 编码,所以我猜这是 Excel 的限制,但我正在寻找一种从 Excel 到 CSV 并保留非 ASCII 字符的方法完好无损的。
一个简单的解决方法是使用 Google 电子表格。粘贴(仅当您有复杂的公式时才使用值)或导入工作表,然后下载 CSV。我只是尝试了几个字符,效果很好。
注意:Google 表格在导入时确实有限制。请参阅here。
注意:请注意 Google 表格中的敏感数据。
编辑:Another alternative - 基本上他们使用 VB 宏或插件来强制保存为 UTF8。我没有尝试过任何这些解决方案,但它们听起来很合理。
我发现 OpenOffice 的电子表格应用程序 Calc 非常擅长处理 CSV 数据。
在“另存为...”对话框中,单击“格式选项”以获取 CSV 的不同编码。 LibreOffice 的工作方式与 AFAIK 相同。
https://i.stack.imgur.com/Mg7oz.png
将 Excel 工作表另存为“Unicode 文本 (.txt)”。好消息是所有国际字符都是 UTF16(注意,不是 UTF8)。但是,新的“*.txt”文件是制表符分隔的,而不是逗号分隔的,因此不是真正的 CSV。 (可选)除非您可以使用 TAB 分隔文件进行导入,否则请使用您喜欢的文本编辑器并将 TAB 字符替换为逗号“,”。在目标应用程序中导入您的 *.txt 文件。确保它可以接受 UTF16 格式。
如果 UTF-16 已正确实现并支持非 BMP 代码点,则您可以将 UTF-16 文件转换为 UTF-8 而不会丢失信息。我把它留给你找到你最喜欢的方法。
我使用此过程将数据从 Excel 导入到 Moodle。
;
,然后将 txt 文件导入 phpmyadmin,并使用默认的“文件字符集:utf-8”,格式“使用加载数据的 CSV”。所有编码均已正确传输。
我知道这是一个老问题,但我碰巧遇到了这个问题,同时也遇到了与 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 中,使用类型 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
CHARACTER SET utf8mb4
:stackoverflow.com/a/10959780/470749
Import-Csv ... | Export-Csv ...
而不使用中间 $data
变量。
这样做的唯一“简单方法”如下。首先,要意识到 Excel .csv 文件中显示的内容和隐藏的内容之间存在差异。
打开一个包含信息的 Excel 文件(.xls、.xlsx) 在 Excel 中,选择“CSV(逗号分隔)(*.csv)作为文件类型并保存为该类型。在 NOTEPAD(在“程序”下找到)和然后在开始菜单中的附件),在记事本中打开保存的.csv文件然后选择->另存为...,在“另存为”框的底部,有一个标记为“编码”的选择框。选择UTF- 8(不要使用 ANSI,否则会丢失所有重音符号等)。选择 UTF-8 后,将文件保存为与原始文件名略有不同的文件名。
该文件采用 UTF-8 格式并保留所有字符和重音符号,并且可以导入,例如,导入 MySQL 和其他数据库程序。
此答案取自 this forum。
我发现另一个有用的:“数字”允许在保存为 CSV 时进行编码设置。
使用记事本++
这将修复 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
是一个文本文件。此答案将打开被 Excel 损坏的 CSV 文件,修复它,然后使用正确的编码重新保存它。
“nevets1219”对于 Google 文档是正确的,但是如果您只是“导入”该文件,它通常不会将其转换为 UTF-8。
但是,如果您将 CSV 导入现有的 Google 电子表格,它确实会转换为 UTF-8。
这是一个食谱:
在主文档(或驱动器)屏幕上单击“创建”按钮并选择“电子表格”
从“文件”菜单中选择“导入”
点击“选择文件”
选择“替换电子表格”
选择您用作分隔符的任何字符
点击“导入”
从“文件”菜单中选择“下载为”-> CSV(当前工作表)
生成的文件将采用 UTF-8
在 Excel 2016 及更高版本(包括 Office 365)下,有一个专用于 UTF-8 格式的 CSV 选项。
在 Office 365 中,执行另存为;以前可能选择了 CSV(逗号分隔),现在您可以保存为 CSV UTF-8(逗号分隔)(*.csv)的文件类型之一
使用 Powershell 怎么样。
Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
对于那些寻找完全程序化(或至少是服务器端)解决方案的人,我使用 catdoc 的 xls2csv 工具取得了巨大的成功。
安装catdoc:
apt-get install catdoc
进行转换:
xls2csv -d utf-8 file.xls > file-utf-8.csv
这速度很快。
请注意,包含 -d utf-8
标志很重要,否则它将以默认的 cp1252
编码对输出进行编码,您将面临丢失信息的风险。
请注意,xls2csv
也仅适用于 .xls
文件,它不适用于 .xlsx
文件。
最简单的方法:不需要打开办公室和谷歌文档
将文件另存为“Unicode 文本文件”;现在你有一个 unicode 文本文件,用“记事本”打开它,然后选择“utf-8”或其他代码页,将文件扩展名从“txt”重命名为“csv”。这将产生一个制表符分隔的 UTF-8 csv 文件。如果您想要一个逗号分隔的文件,请打开您刚刚重命名的 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
假设是 Windows 环境,像往常一样在 Excel 中保存和使用该文件,然后在 Gnome Gnumeric(免费)中打开保存的 Excel 文件。将 Gnome Gnumeric 的电子表格另存为 CSV - 无论如何对我来说 - 将其保存为 UTF-8 CSV。
简单的方法:下载 open office (here),加载电子表格并打开 excel 文件(.xls
或 .xlsx
)。然后只需将其保存为文本 CSV 文件,就会打开一个窗口,要求保留当前格式或另存为 .ODF 格式。选择“保持当前格式”,然后在新窗口中选择更适合您的选项,具体取决于您的文件所使用的语言。对于西班牙语,请选择西欧 (Windows-1252/ WinLatin 1
),该文件可以正常工作。如果您选择 Unicode (UTF-8
),它将不适用于西班牙语字符。
将 xls 文件(Excel 文件)另存为 Unicode 文本=>文件将保存为文本格式 (.txt) 将格式从 .txt 更改为 .csv(将文件从 XYX.txt 重命名为 XYX.csv
我也遇到了同样的问题,但有一个简单的解决方案。
在 Excel 2016 或更高版本中打开您的 xlsx 文件。在“另存为”中选择此选项:“(CSV UTF-8(逗号分隔)*.csv)”
它运行良好,并生成了一个 csv 文件,可以在任何软件中导入。我在我的 SQLITE 数据库中导入了这个 csv 文件,它可以完美地处理所有 unicode 字符。
遇到同样的问题并用谷歌搜索了这篇文章。以上都不适合我。最后,我将我的 Unicode .xls 转换为 .xml(选择 Save as ... 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)
Excel 通常将 csv 文件保存为 ANSI 编码而不是 utf8。
更正文件的一种方法是使用记事本或记事本++:
使用记事本或记事本++ 打开 .csv。将内容复制到您的计算机剪贴板。从文件中删除内容。将文件的编码更改为 utf8。将内容从剪贴板粘贴回来。保存文件。
“nevets1219”的第二个选项是在 Notepad++ 中打开 CSV 文件并转换为 ANSI。
在顶部菜单中选择:编码 -> 转换为 Ansi
编码 -> 转换为 Ansi 会将其编码为 ANSI/UNICODE。 Utf8 是 Unicode 的一个子集。也许在 ANSI 中会被正确编码,但这里我们谈论的是 UTF8,@SequenceDigitale。
有更快的方法,例如导出为 csv(逗号分隔),然后使用 Notepad++(免费)打开该 csv,然后编码 > 转换为 UTF8。但前提是您必须对每个文件执行一次。如果您需要经常更改和导出,那么最好的是 LibreOffice 或 GDocs 解决方案。
Microsoft Excel 可以选择使用 Unicode 编码导出电子表格。请参阅以下屏幕截图。
https://i.stack.imgur.com/HDwEK.png
用记事本++打开.csv。如果你看到你的编码是好的(你看到所有字符都应该是)按 encoding ,然后转换为 ANSI else - 找出你当前的编码是什么
另一种解决方案是通过winword打开文件并将其另存为txt,然后通过excel重新打开它,它将工作ISA
保存对话框 > 工具按钮 > Web 选项 > 编码选项卡
不定期副业成功案例分享