Запись данных Unicode в CSV

Я знаю, что подобные вопросы задавались много раз, но серьезно я не смог правильно реализовать csv writer, который пишет правильно в csv (он показывает мусор).

Я пытаюсь использовать UnicodeWriter как упоминание вофициальные документы .

<code>ff = open('a.csv', 'w')
writer = UnicodeWriter(ff)
st = unicode('Displaygrößen', 'utf-8') #gives (u'Displaygr\xf6\xdfen', 'utf-8')
writer.writerow([st])
</code>

Это не дает мне никакой ошибки декодирования или кодирования. Но это пишет словоDisplaygrößen какDisplaygrößen что не хорошо. Может ли кто-нибудь помочь мне, что я делаю не так здесь ??

 Don07 мая 2012 г., 14:08
Вы уверены, что выviewing a.csv с правильной кодировкой?
 Don07 мая 2012 г., 17:38
В большинстве редакторов вы можете установить «кодировку»; в «файле» или "Просмотреть" меню. Например. в Scite вы можете выбрать utf-8 из File-> gt; Encoding.
 Aamir Adnan07 мая 2012 г., 14:10
Нет, я не уверен, я просто открываю этот CSV-файл. Как это сделать?
 Aamir Adnan07 мая 2012 г., 14:28
Я использовал мастер импорта текста из Excel и определил там кодировку utf-8, данные отображаются правильно. Можем ли мы определить кодировку CSV-файла в коде, чтобы мне не пришлось использовать этот мастер? Также, если я использую codecs.open, а затем пытаюсь записать данные в кодировке Unicode, это вызовет проблемы, которые также упоминаются здесь.stackoverflow.com/questions/3085263/…
 JosefAssad07 мая 2012 г., 14:36
Похоже, что-то не так с кодировкой файла. Если вы отображаете файл где-то, для которого не задано Unicode, вы получите эту ошибку. например, в окне Linux, если я попытаюсь отследить файл с не-ASCII-символами в нем на терминале, когда для моей локали задано, например, ASCII, я получу искаженный текст таким образом.

Ответы на вопрос(2)

Решение Вопроса

но вы не указываете это в свой CSV-файл.

Вы должны написать заголовок UTF-8 в начале файла. Добавь это:

ff = open('a.csv', 'w')
ff.write(codecs.BOM_UTF8)

И ваш CSV-файл должен открыться правильно после того, как программа пытается его прочитать.

 07 мая 2012 г., 14:39
@AamirAdnan Попытайтесь подтвердить то, что я подозреваю, используя кодированную в юникоде версию o-umlaut, установив эту строку в своем скрипте'Displaygr\xc3\xb6ßen', это будет .py файл ascii-proof
 Aamir Adnan07 мая 2012 г., 14:48
Блокнот ++ показывает кодировку скрипта какencode in ANSI
 07 мая 2012 г., 14:37
@AamirAdnan Это способ использовать Excel и UTF-8 CSV-файлы в качестве входных данных. Если у вас все еще есть проблема с конвертацией, я бы заподозрил, что в вашем интерпретаторе Python o-umlaut переведен в символы ascii до того, как он достигнет функции unicode (), и вас здесь обманывает Python. Ваш скрипт .py сохраняется в формате utf-8?
 Aamir Adnan07 мая 2012 г., 14:33
ff = open ("a.csv", "w") ff.write (codecs.BOM_UTF8) writer = UnicodeWriter (ff) writer.writerow ([unicode ('Displaygr & # xF6; & # xDF; en & apos ;, 'utf-8')]), и когда я открываю файл, он все равно не отображается должным образом. Я не хочу использовать мастер импорта из Excel. Ваш ответ - то, что я хочу, но это не работает
 Aamir Adnan07 мая 2012 г., 14:46
спасибо за всю вашу помощь, да, вы были написаны, я был одурачен Python. Я исправил эту кодировку скрипта. Но сейчас я вижуDisplaygren в CSV-файле, гдеöß опущено от слова. Я сейчас только определяю кодировку в скрипте сверху # -- coding: utf-8 --

codecs.open должен это исправить.

 07 мая 2012 г., 14:19
Либо ваша проблема в том, что написано неправильное содержание (это может быть в случае, когда вы открываете егоwithout кодеки) или что вы не настроили свой редактор должным образом, но более вероятно, что записаны неправильные данные. Попробуйте записать те же данные с помощью дескриптора файла изcodecs.open
 Aamir Adnan07 мая 2012 г., 14:14
Я написал контент, и теперь я вручную открываю файл в Windows, чтобы увидеть, что он пишет. Мне не нужно открывать файл через программу.

Ваш ответ на вопрос