我的網站上有一個報告功能,它通過電子郵件發送CSV附加文件。我最近注意到,如果其中一個字符串包含重音字符,我的附加CSV文件會有額外的換行符。奇怪的是,如果字符串不包含任何重音,我不會看到這些額外的換行符。Django:包含Unicode字符的電子郵件附件中的CSV會導致額外的換行
代碼看起來有點像這樣:
# -*- coding: utf8 -*-
import unicodecsv
from StringIO import StringIO
from django.core.mail import EmailMultiAlternatives
# Generating the CSV
csvfile = StringIO()
writer = unicodecsv.writer(csvfile, encoding='utf-8')
writer.writerow([u'Test', u'Linebreak è'])
writer.writerow([u'Another', u'line'])
# Email
msg = EmailMultiAlternatives(
'csv report',
'Here is your attached report',
'[email protected]',
'[email protected]'
)
msg.attach('your_report.csv', csvfile.getvalue(), 'text/csv')
msg.send()
打開與VIM文件顯示我類似的東西:
Test,Linebreak è^M
Another,line
相比較而言,如果CSV行包括:
writer.writerow([u'Test', u'Linebreak'])
writer.writerow([u'Another', u'line'])
附加的CSV將如下所示:
Test,Linebreak
Another,line
getvalue()似乎輸出正確的EOL formater,但是一旦附加文件就會出現某種情況。有人注意到類似的問題嗎?
(乳寧的Django 1.6 Python的2.7)
編輯:我發現我的問題的根源。原來我使用sendgrid發送我的電子郵件,出於某種原因,他們的系統上時,這其中蘊含的口音我的CSV ...
這並不能真正解決問題,是嗎? – hayavuk 2014-10-20 10:00:18
對我來說,它的確如此。我不知道你是否使用sendgrid,但我會嘗試切換用於發送電子郵件的方法(嘗試使用自己的smtp服務器)。我只知道這是一個奇怪的問題,只發生在Unicode字符... – Remiz 2014-10-22 14:09:00
我的意思是,這是一個特定於SendGrid的解決方法,而不是原始問題的解決方案。 – hayavuk 2014-10-22 14:19:21