как писать код unicode csv в Python 2.7

Я хочу записать данные в файлы, где строка из CSV должна выглядеть как этот список (непосредственно из консоли Python):

row = ['\xef\xbb\xbft_11651497', 'http://kozbeszerzes.ceu.hu/entity/t/11651497.xml', "Szabolcs Mag '98 Kft.", 'ny\xc3\xadregyh\xc3\xa1za', 'ny\xc3\xadregyh\xc3\xa1za', '4400', 't\xc3\xbcnde utca 20.', 47.935175, 21.744975, u'Ny\xedregyh\xe1za', u'Borb\xe1nya', u'Szabolcs-Szatm\xe1r-Bereg', u'Ny\xedregyh\xe1zai', u'20', u'T\xfcnde utca', u'Magyarorsz\xe1g', u'4405'] 

Py2k не делает Unicode, но у меня была оболочка UnicodeWriter:

 import cStringIO, codecs 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([unicode(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) 

Однако в этих строках по-прежнему появляется сообщение об ошибке с ошибкой:

 f.write(codecs.BOM_UTF8) writer = UnicodeWriter(f) writer.writerow(row) UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 9: ordinal not in range(128) 

Чем там можно заняться? Благодаря!

  • Как я могу проверить строку юникода Python, чтобы убедиться, что он * на самом деле * является правильным Unicode?
  • Что такое внутреннее представление строки в Python 3.x
  • Запись строк unicode через sys.stdout в Python
  • Правильно извлеките Emojis из строки Unicode
  • строки на иврите в python для s60
  • Python 3 дросселирует на CP-1252 / ANSI
  • Имена файлов Python os.stat и unicode
  • Python, UnicodeDecodeError
  • One Solution collect form web for “как писать код unicode csv в Python 2.7”

    Вы передаете байты, содержащие не-ASCII-данные, и они декодируются в Unicode, используя кодек по умолчанию в этой строке:

     self.writer.writerow([unicode(s).encode("utf-8") for s in row]) 

    unicode(bytestring) с данными, которые невозможно декодировать по мере сбоя ASCII:

     >>> unicode('\xef\xbb\xbft_11651497') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128) 

    Декодируйте данные в Unicode перед передачей его автору:

     row = [v.decode('utf8') if isinstance(v, str) else v for v in row] 

    Это предполагает, что ваши значения bytestring содержат данные UTF-8. Если у вас есть сочетание кодировок, попробуйте декодировать в Unicode в точке происхождения; где ваша программа сначала использовала данные. Вы действительно хотите сделать это в любом случае, независимо от того, откуда пришли данные или если он уже был закодирован в UTF-8.

    Python - лучший язык программирования в мире.