Python: конвертировать Unicode в ASCII без ошибок для файла CSV

Я читал все вопросы относительно преобразования из Unicode в CSV в Python здесь, в StackOverflow, и я все еще теряюсь. Каждый раз, когда я получаю «кодек UnicodeEncodeError: 'ascii', он не может кодировать символ u '\ xd1' в позиции 12: порядковый номер не в диапазоне (128)"

buffer=cStringIO.StringIO() writer=csv.writer(buffer, csv.excel) cr.execute(query, query_param) while (1): row = cr.fetchone() writer.writerow([s.encode('ascii','ignore') for s in row]) 

Значение строки равно

 (56, u"LIMPIADOR BA\xd1O 1'5 L") 

где значение \ xd10 в базе данных – это, с диакритической тильдой, используемой на испанском языке. Сначала я попытался преобразовать значение в нечто действительное в ascii, но после того, как я потерял столько времени, я пытаюсь игнорировать эти символы (я полагаю, у меня была бы такая же проблема с акцентированными гласными).

Я хотел бы сохранить значение в CSV, желательно с помощью «LIMPIADOR BAÑO 1'5 L»), но если это невозможно, по крайней мере, вы сможете его сохранить («LIMPIADOR BAO 1'5 L»).

One Solution collect form web for “Python: конвертировать Unicode в ASCII без ошибок для файла CSV”

Правильно, – не является допустимым символом ASCII, поэтому вы не можете кодировать его в ASCII. Таким образом, вы можете, как ваш код сделать выше, игнорировать их. Другой способ, чтобы удалить акценты, вы можете найти здесь: Каков наилучший способ удаления акцентов в строке юникода Python?

Но обратите внимание, что обе методики могут привести к плохим эффектам, например, сделать слова на самом деле означают что-то другое и т. Д. Поэтому лучше всего держать акценты. И тогда вы не можете использовать ASCII, но вы можете использовать другую кодировку. UTF-8 – это безопасная ставка. Latin-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) 

Теперь ваша реальная ошибка не будет скрыта из-за того, что вы все придерживаетесь в одной строке. Этого также можно было бы избежать, если бы вы включили надлежащую трассировку.

  • не удается открыть URL-адрес юникода с помощью python
  • Почему печать настолько медленная в Python 3.3 и как я могу ее исправить?
  • python: lower () немецкий умляут
  • Как преобразовать int, представляющий символ UTF-8, в кодовую точку Unicode?
  • Существует ли определенный диапазон кодов Unicode, которые можно проверить для emojis?
  • UnicodeEncodeError: кодек ascii не может кодировать символ при попытке HTTP POST в Python
  • Использование функций unicode () и encode () в Python
  • CSV, DictWriter, unicode и utf-8
  • Как узнать номер / имя символа юникода в Python?
  • очистить текст, принадлежащий разным языкам в python
  • Ошибка кодирования Unicode Beautiful Soup
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.