Django 使用Python 2.7导出CSV以在MAC上的Excel中作为utf-8打开

Django 使用Python 2.7导出CSV以在MAC上的Excel中作为utf-8打开,django,excel,python-2.7,csv,unicode,Django,Excel,Python 2.7,Csv,Unicode,我们的用户需要能够将数据导出到csv,并在mac计算机上以Excel格式打开,该计算机支持utf-8字符 注意:我们不希望用户必须转到“数据”选项卡,单击“从文本导入”,然后。。。我们希望他们能够在下载后立即打开文件,并让它显示正确的信息 起初,我认为这只是一个编码/解码问题,因为我们使用的是Python2.7(积极致力于升级到Python3.6),但在修复后,我发现Excel是问题的原因(因为在文本编辑器或甚至数字中打开csv时效果良好)。我正在尝试的解决方案涉及将utf-8 BOM添加到文件

我们的用户需要能够将数据导出到csv,并在mac计算机上以Excel格式打开,该计算机支持utf-8字符

注意:我们不希望用户必须转到“数据”选项卡,单击“从文本导入”,然后。。。我们希望他们能够在下载后立即打开文件,并让它显示正确的信息

起初,我认为这只是一个编码/解码问题,因为我们使用的是Python2.7(积极致力于升级到Python3.6),但在修复后,我发现Excel是问题的原因(因为在文本编辑器或甚至数字中打开csv时效果良好)。我正在尝试的解决方案涉及将utf-8 BOM添加到文件的开头,因为我在某个地方读到,这会让Excel知道它需要utf-8

#这里response只是一个变量,在这样使用和
#我们可以导出不需要utf-8的CSV
writer=csv.writer(响应)
writer.writerow(“0xEF0xBB0xBF”)
我希望,但仅仅像这样将utf-8 BOM添加到csv文件的开头,就可以让Excel在打开此文件时意识到需要使用utf-8编码,但遗憾的是,它不起作用。我不确定这是因为Excel for MAC不支持这一点,还是我只是错误地添加了BOM表


编辑:我不确定为什么我没有提到它,因为它在解决方案中非常关键,但我们正在使用Django。我找到了给出解决方案的堆栈溢出帖子(我已经在下面介绍过了)。

因为我们使用的是Django,所以我们可以包括:

response.write('\xEF\xBB\xBF')
在创建csv编写器并将内容添加到csv之前


另一个可能会产生解决方案的想法是,正常打开文件,添加BOM,然后创建csv编写器(注意:我没有测试这个想法,但是如果上面的解决方案不适用于没有使用Django的人,那么可以尝试一下)。

因为我们使用Django,所以我们可以包括:

response.write('\xEF\xBB\xBF')
在创建csv编写器并将内容添加到csv之前


另一个可能会导致解决方案的想法是正常打开文件,添加BOM,然后创建csv编写器(注意:我没有测试这个想法,但如果上面的解决方案不适用于没有使用Django的人,那么可以尝试一下)。

我确实发现网站上说使用utf-18le编码是正确的方法,但我也不能让它发挥作用。我尝试使用stackoverflow post中的信息,但这不起作用,因为
“\u csv.writer”对象没有属性“write”
,这很有意义,但我不知道该用什么来代替。我确实发现网站上说使用utf-18le编码是正确的方法,但我也无法让它起作用。我尝试使用StAdvExcel帖子中的信息,但这不起作用,因为<代码> 'sCSV.Wrror对象没有属性“写”<代码>,这是有意义的,但是我不知道该怎么用。为了更好的解决方案,考虑使用第三方<代码> UnoDeCsv 模块,用Python 2.7的CSV模块来纠正这些问题。(Python 3可以处理Unicode字符串)因为在移植到Python 3的过程中,我们很快就需要一个快速修复。但是对于那些不切换到Python 3的人来说,如果他们正在寻找更持久/标准的东西,Mark的注释可能是一个更好的解决方案。为了更好的解决方案,考虑使用第三方COD。e> unicodecsv模块,用于纠正Python 2.7的csv模块的问题(Python 3可以处理Unicode字符串),或查看中的UnicodeReader/UnicodeWriter示例。由于我们很快就要移植到Python 3,因此在此之前我们只需要一个快速修复。但是对于其他没有切换到Python 3的人来说,如果他们正在寻找更持久/标准的解决方案,Mark的评论可能是更好的解决方案。