我们有一些用户需要能够将数据导出到支持utf-8字符的Mac计算机上的Excel中打开的csv中。
注意:我们不希望用户必须转到数据选项卡,单击从文本导入,然后...我们希望他们能够在下载后立即打开文件并让其显示正确的信息。
起初,我以为这只是一个编码/解码问题,因为我们使用的是python 2.7(积极致力于升级到python 3.6),但是在解决此问题后,我发现Excel是造成此问题的原因(因为在文本编辑器或“数字”中打开csv时效果很好。我正在尝试的解决方案涉及将utf-8 BOM添加到文件的开头,因为我在某处读取到此内容,这会让Excel知道它需要utf-8。
#Here response is just a variable that is valid when used like this and
#we can export CSV's fine that don't need utf-8
writer = csv.writer(response)
writer.writerow("0xEF0xBB0xBF")
我希望但只将utf-8 BOM添加到csv文件的开头将使Excel意识到打开该文件时需要使用utf-8编码,但是可惜它不起作用。我不确定这是因为Excel for MAC不支持此功能还是我只是错误地添加了BOM表。
编辑:我不确定为什么我没有提到它,因为它在解决方案中很关键,但是我们使用的是Django。我发现this堆栈溢出帖子给出了解决方案(我在下面提供了该帖子)。
答案 0 :(得分:0)
因为我们使用的是Django,所以我们可以添加:
response.write('\xEF\xBB\xBF')
在创建csv编写器并将内容添加到csv之前。
可能会导致解决方案的另一个想法是正常打开文件,添加BOM,然后创建一个csv编写器(注意:我没有测试这个想法,但是如果上述解决方案对某人无效/他们没有使用Django,可以尝试使用。)