使用UTF8编码的Excel到CSV

Excel to CSV with UTF8 encoding

我有一个Excel文件,其中包含一些西班牙语字符(tildes等),我需要将其转换为CSV文件以用作导入文件。但是,当我保存为csv时,它会管理不是ascii字符的"特殊"西班牙字符。这似乎也与左右引号和长破折号有关,这些引号和长破折号似乎来自于在Mac中创建Excel文件的原始用户。

因为csv只是一个文本文件,我相信它可以处理utf8编码,所以我猜这是一个excel限制,但我正在寻找一种从excel到csv的方法,并保持非ascii字符的完整性。


一个简单的解决方法是使用谷歌电子表格。粘贴(仅当您有复杂的公式时才使用值)或导入工作表,然后下载csv。我刚试过几个角色,效果相当好。

注:Google工作表在导入时有限制。请看这里。

注意:使用谷歌表格时要小心敏感数据。

编辑:另一种选择-基本上他们使用vb宏或加载项强制另存为utf8。我没有尝试过这些解决方案,但它们听起来很合理。


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

在"另存为…"对话框中,单击"格式选项"以获取csv的不同编码。Libreoffice的工作方式与Afaik相同。

calc save dialog


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

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

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

  • 如果在支持非BMP代码点的情况下正确实现了UTF-16,那么您可以将UTF-16文件转换为UTF-8,而不会丢失信息。我把它留给你去寻找你最喜欢的方法。

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


    我知道这是一个古老的问题,但我在和OP的问题作斗争的时候,碰巧遇到了这个问题。

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

    幸运的是,我发现丢失字符的问题只在从XLSX格式保存到CSV格式时发生(在我的例子中)。我尝试先将XLSX文件保存到XLS,然后保存到CSV。它确实起作用了。

    请试一试,看看是否适合你。祝你好运。


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

    在命令行的excel下保存为csv后,输入:

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

    (记住用您的编码替换CP1250)。

    对于像邮政编码数据库这样不能导入GoogleDocs的大文件(限制为400000个单元格),它的工作速度很快而且很好。


    唯一的"简单方法"如下。首先,要意识到在excel.csv文件中显示的内容和隐藏的内容是有区别的。

    (1)打开包含信息的Excel文件(.xls,.xlsx)

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

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

    (4)然后选择->另存为..并在"另存为"框的底部有一个标记为"编码"的选择框。选择utf-8(不要使用ansi或丢失所有重音符号等)。选择utf-8之后,将文件保存到与原始文件稍有不同的文件名。

    这个文件是UTF-8格式的,保留了所有字符和重音符号,可以导入到MySQL和其他数据库程序中。

    此答案摘自本论坛。


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

    1。从Excel中保存

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

    2。启动PowerShell

    从开始菜单运行powershell

    三。在PowerShell中加载文件

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

    4。将数据保存为csv

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


    我发现另一个有用的:"数字"允许在保存为csv时进行编码设置。


    "nevets1219"对于google文档来说是正确的,但是如果你简单地"导入"文件,它通常不会将其转换为utf-8。

    但是,如果将csv导入到现有的Google电子表格中,它确实会转换为utf-8。

    这是一个食谱:

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

    结果文件将采用UTF-8格式。


    使用记事本+

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

    • 从Excel导出csv
    • 载入记事本++
    • 固定编码
    • 保存

    Excel保存在CP-1252/Windows-1252中。在记事本+中打开csv文件。选择

    1
    Encoding > Character Sets > Western European > Windows-1252

    然后

    1
    2
    Encoding > Convert to UTF-8
    File > Save

    首先告诉记事本++编码,然后转换。其中一些其他答案在转换时没有首先设置正确的编码,从而使文件更加混乱。他们会把应该是的东西变成。如果您的角色不适合CP-1252,那么它在保存为csv时已经丢失。用另一个答案。


    对于那些寻求完全编程(或者至少是服务器端)解决方案的人,我已经成功地使用了CatDoc的XLS2csv工具。

    安装CATDOC:

    1
    apt-get install catdoc

    进行转换:

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

    这很快就烧起来了。

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

    注意,xls2csv也只适用于.xls文件,不适用于.xlsx文件。


    使用PowerShell怎么样?

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


    最简单的方法:不需要开放式办公室和谷歌文档

  • 将文件另存为"unicode文本文件";
  • 现在您有了一个Unicode文本文件
  • 用"记事本"和"另存为"打开它,选择"UTF-8"或您需要的其他代码页
  • 将文件扩展名从"txt"重命名为"csv"。这将导致以制表符分隔的utf-8csv文件。
  • 如果需要逗号分隔的文件,请打开刚才重命名的CSV文件,并用逗号替换所有选项卡。要在Win 10的记事本中执行此操作,只需选择一个选项卡字段,然后单击Ctrl+H。在打开的窗口中,在"替换为"字段中键入逗号,,然后单击"全部替换"。保存文件。结果将是一个逗号分隔的utf-8csv文件。
  • 无论如何,不要用MS Office打开它!!!!现在您有了一个以制表符分隔的csv文件。或者,如果应用了步骤5,则用逗号分隔。


    有趣的是,我发现将180MB电子表格保存到utf8 csv文件中最简单的方法是将单元格选择到Excel中,复制它们,并将剪贴板的内容粘贴到Sublimetext中。


    在Excel2016中,我们有一个专门用于UTF-8格式的csv导出选项。


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

    所以我终于放弃了vba,咬了一口子弹,学会了applescript。这并没有我想象的那么糟糕。

    解决方案如下:http://talesoftech.blogspot.com/2011/05/excel-on-mac-再见-vba-hello.html


  • 将XLS文件(Excel文件)保存为Unicode文本=>文件将以文本格式(.txt)保存。

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


  • 假设使用Windows环境,在Excel中像往常一样保存并使用该文件,但在GNOME GNUMERIC(免费)中打开保存的Excel文件。将gnome gnumeric的电子表格保存为csv,不管怎样,它都将保存为utf-8csv。


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

  • 在Excel 2016或更高版本中打开XLSX文件。
  • 在"另存为"中,选择此选项:"(csv utf-8(逗号分隔的)*.csv)"
  • 它工作得很好,生成了一个可以导入任何软件的csv文件。我在我的sqlite数据库中导入了这个csv文件,它与所有unicode字符都是完整的。


    简单的方法是:下载开放式Office(此处),加载电子表格并打开Excel文件(.xls.xlsx)。然后将其保存为文本csv文件,并打开一个窗口,要求保留当前格式或另存为.odf格式。选择"保留当前格式",然后在新窗口中,根据文件所用的语言,选择适合您的选项。对于西班牙语,选择西欧(Windows-1252/ WinLatin 1),文件工作正常。如果选择unicode(UTF-8),它将不适用于西班牙语字符。


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

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

  • 用记事本或记事本+打开.csv。
  • 将内容复制到计算机剪贴板。
  • 从文件中删除内容。
  • 将文件的编码改为utf8。
  • 从剪贴板中粘贴内容。
  • 保存文件。

  • 我已经编写了一个小的python脚本,可以用utf-8导出工作表。

    您只需提供Excel文件作为第一个参数,然后提供要导出的工作表。如果不提供工作表,脚本将导出Excel文件中存在的所有工作表。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #!/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)


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


    "nevets1219"的第二个选项是在记事本++中打开csv文件,并进行到ansi的转换。

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


    encoding->convert to ansi将以ansi/unicode编码。UTF8是Unicode的一个子集。也许在ANSI中编码是正确的,但这里我们讨论的是utf8,@sequencedigitale。

    有更快的方法,比如导出为csv(逗号分隔),然后用记事本+打开csv(免费),然后编码>转换为utf8。但只有在每个文件都必须这样做的情况下。如果您需要频繁地更改和导出,那么最好是libreoffice或gdocs解决方案。


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


    Microsoft Excel可以选择使用Unicode编码导出电子表格。请参见以下屏幕截图。

    enter image description here


    用记事本+打开.csv fine。如果您看到您的编码是好的(您看到所有字符应该是好的),请按"编码",然后转换为ANSI其他-找出您当前的编码方式


    另一种解决方案是用Winword打开文件并将其保存为TXT,然后用Excel重新打开,它将工作于ISA。


    我需要在我的Mac上自动化这个过程。我最初按照Mpowered的建议尝试使用catdoc/xls2csv,但xls2csv在检测文档的原始编码时遇到问题,并非所有文档都是相同的。我最后做的是将默认的网页输出编码设置为UTF-8,然后将文件提供给苹果的自动机,应用Convert Format of Excel Files操作转换为Web Page (HTML)。然后使用PHPDOMDocumentXPath查询文档,并将它们格式化为CSV

    这是php脚本(process.php):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?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命令:

    1
    find . -name '*.htm' | xargs -I{} php ./process.php {}

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


    我也遇到了同样的问题,并且遇到了这个插件,它在Excel2013中除了提到的Excel2007和2010外,工作得非常好。


    对于那些拥有崇高文本的人:用编码utf-16le和bom保存应该可以做到;-)


    (在Mac上):从Excel另存为csv文件。在textwrangler中打开csv文件(它是免费的)并使用"另存为"。在"保存"对话框中,选择"Unicode(UTF-8)"。多恩

    (我想你也可以用textedit来做这个-如果你使用打开和保存设置的话。尝试打开文件:自动,保存文件:utf-8)


    另一种方法是在记事本中打开utf-8csv文件,它将在其中正确显示。然后将所有""替换为制表符。将所有这些内容粘贴到新的Excel文件中。


    您可以将excel保存为unicode文本,它是以制表符分隔的。


    我使用了以下解决方案:mac exel 2008>file>save as,然后在format下使用ms-dos逗号分隔(.csv)。工作完美。