Я пытался использовать csv.DictReader для разбора UTF-8 данные с помощью специальных символов, но я получаю следующее сообщение об ошибке:unicodecsv.DictReader не работает с io.StringIO (Python 2.7)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe3' in position 2: ordinal not in range(128)
Я прочитал онлайн и выяснили, что библиотека csv Python 2.7 не обрабатывает Unicode. Я искал альтернативную библиотеку и нашел unicodecsv
.
Я заменил csv на unicodecsv, но я получаю ту же ошибку. Вот упрощенная версия моего кода:
from io import StringIO
from unicodecsv import DictReader, Dialect, QUOTE_MINIMAL
data = (
'first_name,last_name,email\r'
'Elmer,Fudd,[email protected]\r'
'Jo\xc3\xa3o Ant\xc3\xb4nio,Ara\xc3\xbajo,[email protected]\r'
)
unicode_data = StringIO(unicode(data, 'utf-8-sig'), newline=None)
class CustomDialect(Dialect):
delimiter = ','
doublequote = True
escapechar = '\\'
lineterminator = '\r\n'
quotechar = '"'
quoting = QUOTE_MINIMAL
skipinitialspace = True
rows = DictReader(unicode_data, dialect=CustomDialect)
for row in rows:
print row
Если я заменяю StringIO с BytesIO, кодирование работает, но я не могу отправить newlines
аргумент больше, и тогда я получаю:
Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
ли кто-нибудь любая идея, как я мог это решить? Не следует ли использовать unicodecsv для StringIO? Спасибо