2👍
✅
So, it seems you are not encoding your CSV properly.
Take a look at this note in the csv
module docs (Python 2.7):
Note This version of the
csv
module doesn’t support Unicode input. Also, there are currently some issues regarding ASCII NUL characters. Accordingly, all input should be UTF-8 or printable ASCII to be safe; see the examples in section Examples.
This is the example they are referring to:
class UnicodeWriter:
"""
A CSV writer which will write rows to CSV file "f",
which is encoded in the given encoding.
"""
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
# Redirect output to a queue
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()
def writerow(self, row):
self.writer.writerow([s.encode("utf-8") for s in row])
# Fetch UTF-8 output from the queue ...
data = self.queue.getvalue()
data = data.decode("utf-8")
# ... and reencode it into the target encoding
data = self.encoder.encode(data)
# write to the target stream
self.stream.write(data)
# empty queue
self.queue.truncate(0)
def writerows(self, rows):
for row in rows:
self.writerow(row)
Just use UnicodeWriter
instead of csv.writer
(a drop-in replacement):
writer = UnicodeWriter(csv_buffer)
instead of:
writer = csv.writer(csv_buffer)
Or, if you can, switch to Python 3 which handles Unicode much better than Python 2.
Source:stackexchange.com