Вы действительно можете написать строки UTF-8 с модулем csv, но вы не можете передавать строки unicode, содержащие символы не ASCII, в csv-запись. Документ для функции writerow(row)
: Строка должна быть последовательностью строк или чисел для объектов Writer и словами, сопоставляющими имена полей с строками или номерами (, передавая их через str() сначала) для объектов DictWriter. (акцент мой). Таким образом, вы должны сначала значения кодирования:
writer.writerow([ val.encode('utf8') if isinstance(val, unicode) else val for val in row ])
же для сепаратора не использовать Юникод, но строка в кодировке: использовать занозу в качестве разделителя:
wr = csv.writer(fd, delimiter = u'\xfe'.encode('utf8'))
Покажите нам код, конкретно MCVE http://stackoverflow.com/help/mcve – CrazyCasta
Вы можете использовать функцию печати с «колючкой» в качестве разделителя и перенаправить в файл. –