Python 2 solution using unicodecsv
. Note that the documentation for unicodecsv
says the module should be opened in binary mode (wb
). Make sure to write Unicode strings. #coding
is required to support non-ASCII characters in the source file. Make sure to save the source file in UTF-8.
#coding:utf8
import unicodecsv
with open('test.csv','wb') as f:
# Manually encode a BOM, utf-8-sig didn't work with unicodecsv
f.write(u'ufeff'.encode('utf8'))
w = unicodecsv.writer(f,encoding='utf8')
# Write Unicode strings.
w.writerow([u'English',u'Chinese'])
w.writerow([u'American',u'美国人'])
w.writerow([u'Chinese',u'中国人'])
Python 3 solution. #coding
is optional here because it defaults to UTF-8. Just make sure to save the source file in UTF-8. unicodecsv
is no longer required. The built-in csv
works correctly. csv
documentation says to open the file with newline=''
.
#coding:utf8
import csv
with open('test.csv','w',newline='',encoding='utf-8-sig') as f:
w = csv.writer(f)
# Write Unicode strings.
w.writerow([u'English',u'Chinese'])
w.writerow([u'American',u'美国人'])
w.writerow([u'Chinese',u'中国人'])
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…