Правильно, ñ не является допустимым символом ASCII, поэтому его нельзя кодировать в ASCII. Таким образом, вы можете, как ваш код выше, игнорировать их. Другой способ, а именно убрать акценты, вы можете найти здесь:
Каков наилучший способ удаления акцентов в строке Unicode Python?
Но учтите, что оба метода могут привести к плохим последствиям, например, когда слова на самом деле означают что-то другое и т. Д. Поэтому лучше всего сохранять акценты. И тогда вы не можете использовать ASCII, но вы можете использовать другую кодировку. UTF-8 - безопасная ставка. Латинская-1 или ISO-88591-1 является обычной, но она включает только западноевропейские символы. CP-1252 распространен в Windows и т. Д. И т. Д.
Так что просто переключите "ascii" для любой кодировки, которую вы хотите.
Ваш фактический код, согласно вашему комментарию:
writer.writerow([s.encode('utf8') if type(s) is unicode else s for s in row])
, где
row = (56, u"LIMPIADOR BA\xd1O 1'5 L")
Теперь, я считаю, что это должно работать, но, очевидно, это не так. Я думаю, что Unicode все равно передается в CvS Writer по ошибке. Разверните эту длинную строку по ее частям:
col1, col2 = row # Use the names of what is actually there instead
row = col1, col2.encode('utf8')
writer.writerow(row)
Теперь ваша настоящая ошибка не будет скрыта тем фактом, что вы вставляете все в одну строку. Этого также, вероятно, можно было бы избежать, если бы вы включили правильную трассировку.