【问题标题】:Writing unicode to csv in Python and opening with MS Excel在 Python 中将 unicode 写入 csv 并使用 MS Excel 打开
【发布时间】:2017-01-18 12:01:58
【问题描述】:

我正在编写一个小应用程序来比较两个 XML 文件,然后将差异输出到 CSV。当我使用 notepad++ 打开 CSV 时,一切看起来都很好(显示编码 UTF-8,但使用 MS Excel 打开时出现奇怪的字符。任何想法如何使其在 MS Excel 中也能工作?

我正在使用xml.etree.ElementTree 来解析 XML 文件。差异存储在两个列表中。我已经尝试了其他类似问题的各种建议,但似乎没有任何效果。

文件保存代码在这里:

def saveresults():
filesave = tkFileDialog.asksaveasfilename(initialdir=filenewdir, title="Save to CSV",
                                      defaultextension=".csv", filetypes=[("CSV (Comma delimited)", ".csv")])
if filesave is not None:
    with open(filesave, 'wb') as fp:
        writef = unicodecsv.writer(fp, dialect="excel-tab", encoding="utf-8")
        writef.writerow(("Trigger", "Variable", "Old label", "Old columns", "Old precode", "Old precode text",
                        "New label", "New columns", "New precode", "New precode text"))

        for x, newvalue in enumerate(newvalues):
            writef.writerow((newvalue[0], newvalue[1], oldvalues[x][2], oldvalues[x][3], oldvalues[x][4],
                             oldvalues[x][5], newvalue[2], newvalue[3], newvalue[4], newvalue[5]))
        fp.close()
        tkMessageBox.showinfo(title="Message", message="Done!")

记事本中的测试文本:

在 Lietuvos valstiečių ir žaliųjų sąjungos (LVŽS) 上花费 2,000 英镑或更多

使用 MS Excel 打开时相同的文本:

在建筑、装饰或家居装修上花费 2,000 英镑或更多 Lietuvos valstieÄių ir žaliųjų sÄ…jungos (LVŽS)

【问题讨论】:

    标签: python-2.7 csv python-unicode


    【解决方案1】:

    似乎 MS Excel 版本正在读取文件,就好像它是用 ANSI 编码的一样,所以我预计这最终是一个 excel 问题 - 你提到了其他问题中的尝试想法,是否包括 Is it possible to force Excel recognize UTF-8 CSV files automatically? ?特别是如果您打开 excel 然后导入数据,而不是从资源管理器/命令行使用 excel 打开数据,它是否有效?

    【讨论】:

    • 如果我使用向导导入 CSV 或在打开它之前在记事本中使用 BOM 将编码转换为 UTF-8,它可以在 Excel 中工作。将是添加 BOM 的正确方法吗?我试过writef.writerow(codecs.BOM_UTF8),但没用。
    • 您可以尝试明确包含 BOM:writerow('\uefbbbf'),但正式不推荐这样做 - 可能因此它不会自动完成
    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 2017-12-15
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    相关资源
    最近更新 更多