我得到了一些希腊字符在行#A。但是完全相同的行B无法产生希腊字符$^#$#^$#$#^ @@%$#^#^$#$ 请帮帮我!
我得到了一些希腊字符在行#A。但是完全相同的行B无法产生希腊字符$^#$#^$#$#^ @@%$#^#^$#$ 请帮帮我!
使用Python的csv
模块,如果你在文件开头放置BOM,则可以编写一个UTF-8文件,Excel将正确读取该文件。
with open('myfile.csv', 'wb') as f:
f.write(u'\ufeff'.encode('utf8'))
writer = csv.writer(f, delimiter=';', lineterminator='\n', quoting=csv.QUOTE_ALL, dialect='excel')
...
使用 unicodecsv
应该也可以实现相同的效果。如果不能在 HttpResponse
对象中直接写入 BOM,则可以先使用 StringIO
写入文件。
编辑:
这里提供一些示例代码,可编写带有非 ASCII 字符的 UTF-8 CSV 文件。为了简单起见,我将 Django 排除在外。我可以在 Excel 中读取该文件。
# -*- coding: utf-8 -*-
import csv
import os
response = open(os.path.expanduser('~/utf8_test.csv'), 'wb')
response.write(u'\ufeff'.encode('utf8'))
writer = csv.writer(response, delimiter=';' , dialect='excel')
writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', u"ελληνικά".encode('utf8')])
response.close()
我从未能够在Excel中打开UTF-8编码的(CSV)文件。我唯一成功让Excel正确导入文件的方法是使用UTF-16LE。结果可能因人而异。
编辑
首先
writer.writerow(codecs.BOM_UTF16_LE)
然后(根据需要重复多次;str是要编码和写入的字符串)
writer.writerow(str.decode('utf8').encode('utf_16_le'))