首页 文章

使用UTF8编码的Excel到CSV

提问于
浏览
537

我有一个Excel文件,其中包含一些西班牙语字符(波浪号等),我需要将其转换为CSV文件以用作导入文件 . 但是,当我执行另存为CSV时,它会破坏非ASCII字符的“特殊”西班牙语字符 . 它似乎使用左右引号和长短划线来执行此操作,这些短划线似乎来自在Mac中创建Excel文件的原始用户 .

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

30 回答

  • 23

    对于那些寻求完全程序化(或至少是服务器端)解决方案的人来说,使用catdoc的xls2csv工具取得了巨大的成功 .

    安装catdoc:

    apt-get install catdoc
    

    做转换:

    xls2csv -d utf-8 file.xls > file-utf-8.csv
    

    这是非常快的 .

    请注意,包含 -d utf-8 标志很重要,否则它将以默认的 cp1252 编码对输出进行编码,并且存在丢失信息的风险 .

    请注意, xls2csv 也仅适用于 .xls 文件,它不适用于 .xlsx 文件 .

  • 3
    • 将xls文件(Excel文件)另存为Unicode text => file将以文本格式保存(.txt)

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

  • 101

    easiest way: 不需要打开办公室和谷歌文档

    • 将文件另存为"Unicode text file";

    • 现在你有一个unicode文本文件

    • 用"notepad"和"Save as"打开它,选择"utf-8"或您想要的其他代码页

    • 将文件扩展名从"txt"重命名为"csv"

    dont open it with Ms-office anyway!!! Now you have a tab delimited CSV file.

  • 5

    简单的方法:下载开放式办公室(here),加载电子表格并打开Excel文件( .xls.xlsx ) . 然后将其保存为文本CSV文件,并打开一个窗口,要求保留当前格式或保存为.ODF格式 . 选择"keep the current format"并在新窗口中根据您的文件所使用的语言选择更适合您的选项 . 对于西班牙语选择西欧( Windows-1252/ WinLatin 1 ),文件工作正常 . 如果选择Unicode( UTF-8 ),则不能使用西班牙语字符 .

  • 1

    “nevets1219”的第二个选项是在记事本中打开CSV文件并转换为ANSI .

    在顶部菜单中选择:编码 - >转换为Ansi

  • 7

    另一个我发现有用的:“ Numbers ”允许在保存为CSV时进行编码设置 .

  • 3

    您可以在没有第三方软件的现代Windows计算机上执行此操作 . 此方法可靠,它将处理包含引号,引用的制表符,CJK字符等的数据 .

    1. Save from Excel

    在Excel中,使用 Unicode Text (*.txt) 类型将数据保存到 file.txt .

    2. Start PowerShell

    从“开始”菜单运行 powershell .

    3. Load the file in PowerShell

    $data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode
    

    4. Save the data as CSV

    $data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation
    
  • 34

    您可以在Unix下使用iconv命令(在Windows上也可用作libiconv) .

    在Excel下在命令行中保存为CSV后:

    iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv
    

    (记得用你的编码替换cp1250) .

    对于像邮政编码数据库这样的大文件来说工作速度非常快,而且无法导入到GoogleDocs(400.000个单元格的限制) .

  • 1

    假设有一个Windows环境,请像往常一样在Excel中保存和使用该文件,然后在Gnome Gnumeric(免费)中打开保存的Excel文件 . 将Gnome Gnumeric的电子表格保存为CSV,无论如何,将其保存为UTF-8 CSV .

  • 1

    编码 - >转换为Ansi将以ANSI / UNICODE编码 . Utf8是Unicode的子集 . 也许在ANSI中会被正确编码,但在这里我们讨论的是UTF8,@ SequenceDigitale .

    有更快的方法,比如导出为csv(逗号分隔),然后用记事本(免费)打开csv,然后编码>转换为UTF8 . 但是,只有每个文件必须执行一次此操作 . 如果您需要经常更改和导出,那么最好的是LibreOffice或GDocs解决方案 .

  • 2

    保存对话框>工具按钮> Web选项>编码选项卡

  • 3

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

    • 在Excel 2016或更高版本中打开xlsx文件 .

    • 在"Save As"中选择此选项:"(CSV UTF-8(Comma Delimited)*.csv)"

    它工作正常,并生成一个csv文件,可以在任何软件中导入 . 我在我的SQLITE数据库中导入了这个csv文件,它可以完美地与所有unicode字符完美配合 .

  • 1

    我遇到了同样的问题并且遇到了this加入,并且它在excel 2013中与excel 2007和2010相比完美无缺 .

  • 41

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

    在"Save As..."对话框中,单击"Format Options"以获取CSV的不同编码 . LibreOffice与AFAIK的工作方式相同 .

  • 1

    一个简单的解决方法是使用Google电子表格 . 粘贴(仅当您具有复杂公式时的值)或导入工作表然后下载CSV . 我只是尝试了几个角色而且效果很好 .

    注意:Google表格在导入时确实存在限制 . 见here .

    注意:请注意Google表格中的敏感数据 .

    编辑:Another alternative - 基本上他们使用VB宏或插件强制保存为UTF8 . 我没有尝试过任何这些解决方案,但它们听起来很合理 .

  • 8

    这样做的唯一“简单方法”如下 . 首先,要意识到Excel .csv文件中显示的内容与隐藏的内容之间存在差异 .

    (1) 打开一个Excel文件,其中包含信息(.xls,.xlsx)

    (2) 在Excel中,选择“CSV(逗号分隔)(* .csv)作为文件类型并保存为该类型 .

    (3) 在NOTEPAD(在"Programs"下找到,然后在开始菜单中找到附件)中,在记事本中打开保存的.csv文件

    (4) 然后选择 - >另存为..在"save as"框的底部,有一个标记为"Encoding"的选择框 . 选择UTF-8(不要使用ANSI或丢失所有重音等) . 选择UTF-8后,将文件保存为与原始文件略有不同的文件名 .

    此文件采用UTF-8格式,并保留所有字符和重音符,并可导入到MySQL和其他数据库程序中 .

    这个答案取自this forum .

  • 2

    遇到了同样的问题并搜索了这篇文章 . 以上都不适合我 . 最后我将我的Unicode .xls转换为.xml(选择另存为... XML Spreadsheet 2003),它生成了正确的字符 . 然后我编写了代码来解析xml并提取内容供我使用 .

  • 3

    我知道这是一个古老的问题,但我碰巧遇到了与OP相同问题的同时遇到这个问题 .

    没有找到任何提供的解决方案是一个可行的选择,我开始发现是否有办法只使用Excel来做到这一点 .

    幸运的是,我发现从xlsx格式保存到csv格式时,丢失的字符问题只发生(在我的情况下) . 我尝试先将xlsx文件保存到xls,然后再保存到csv . 它确实有效 .

    请试一试,看看它是否适合您 . 祝好运 .

  • 3
    • 将Excel工作表另存为“Unicode文本(.txt)” . 好消息是所有的国际字符都是UTF16(注意,不是UTF8) . 但是,新的“* .txt”文件是以TAB分隔的,而不是逗号分隔的,因此不是真正的CSV .

    • (可选)除非您可以使用TAB分隔文件进行导入,否则请使用您喜欢的文本编辑器并用逗号“,”替换TAB字符 .

    • 在目标应用程序中导入* .txt文件 . 确保它可以接受UTF16格式 .

    如果UTF-16已正确实现并支持非BMP代码点,则可以将UTF-16文件转换为UTF-8而不会丢失信息 . 我留给你找到你最喜欢的方法 .

    我使用此过程将数据从Excel导入Moodle .

  • 0

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

    更正文件的一个选项是使用记事本或记事本:

    • 用记事本或记事本打开.csv .

    • 将内容复制到计算机剪贴板 .

    • 删除文件中的内容 .

    • 将文件的编码更改为utf8 .

    • 从剪贴板中粘贴内容 .

    • 保存文件 .

  • 2

    “nevets1219”对于Google文档是正确的,但是如果您只是“导入”该文件,它通常不会将其转换为UTF-8 .

    但是,如果您将CSV导入现有的Google电子表格,则会转换为UTF-8 .

    这是一个食谱:

    • 在主文档(或驱动器)屏幕上单击"Create"按钮并选择"Spreadsheet"

    • 从"File"菜单中选择"Import"

    • 点击"Choose File"

    • 选择"Replace spreadsheet"

    • 选择您用作分隔符的任何字符

    • 点击"Import"

    • 从"File"菜单中选择"Download as" - > CSV(当前工作表)

    生成的文件将采用UTF-8格式

  • 19

    使用记事本

    这将修复Excel保存的损坏的CSV文件,并以正确的编码重新保存 .

    • 从Excel导出CSV

    • 加载到记事本中

    • 修复编码

    • 保存

    Excel保存在CP-1252 / Windows-1252中 . 在记事本中打开CSV文件 . 选择

    Encoding > Character Sets > Western European > Windows-1252
    

    然后

    Encoding > Convert to UTF-8
    File > Save
    

    首先告诉记事本编码,然后转换 . 这些其他答案中的一些是在没有先设置正确编码的情况下进行转换,甚至更多地修改文件 . 他们会把 变成 . 如果您的角色不适合CP-1252,那么当它保存为CSV时它已经丢失 . 使用另一个答案 .

  • 3

    另一种解决方案是通过winword打开文件并将其保存为txt,然后通过excel重新打开它,它将工作ISA

  • 14

    用记事本打开.csv罚款 . 如果你看到你的编码是好的(你看到所有字符应该是)按下编码,然后转换为ANSI else - 找出你当前的编码

  • 118

    虽然看起来很有趣,但我发现将180MB电子表格保存为UTF8 CSV文件的最简单方法是将单元格选择到Excel中,复制它们并将剪贴板的内容粘贴到SublimeText中 .

  • 2

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

    怎么样使用Powershell .

    Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
    
  • 372

    Microsoft Excel可以选择使用Unicode编码导出电子表格 . 见下面的截图 .

    enter image description here

  • 1

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

    所以我最终不得不放弃VBA,咬紧牙关,学习AppleScript . 这并不像我想象的那么糟糕 .

    此处描述了解决方案:http://talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html

  • 3

    在Excel 2016下,我们有一个专用于UTF-8格式的CSV导出选项 .

相关问题