Проблема с Unicode в Python: Google переводит результаты в CSV - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь написать программу на python, чтобы получить результаты google translate с нескольких языков и записать их в файл csv.Большая часть кода работает, но я сталкиваюсь с проблемами юникода.

Текущий код:

WordTable = open('Translated.csv', 'w', newline="", encoding = 'utf-8-sig')
WordWrite = unicodecsv.writer(WordTable)
for row in WordOut:

    print(row[0])
    row = row + [Translator().translate(row[0], src = 'en', dest='es').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='ar').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='zh-CN').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='ru').text]
    print(len(row), row)
    WordWrite.writerow(row)

Что я пробовал после прочтения здесь и в других местах:

  1. текущий код: приводит к «UnicodeEncodeError:« символ charmap не может кодировать символы ». Это также происходит, когда вообще не используются команды или опции кодирования.

  2. , изменяющиеперевод строки на:

    row = row + [Translator().translate(row[0], src = 'en', dest='ru').text.encode('utf-8-sig')]
    

или эквивалентный: код выполняется, но выплевывает более длинные версии "b '\ xef \ xbb \" и т. д.

Am такжезаинтересован в объяснении того, что происходит, если возможно (что в каком формате, когда он изменяется, как он вводится и т. д.), если это возможно. Объяснения, которые я читал в другом месте, могут запутаться.

Редактировать: это в Python 3.4

1 Ответ

0 голосов
/ 04 июня 2019

После нескольких повторных проверок выясняется, что этот код работает правильно для csv:

WordTable = open('Translated.csv', 'w', newline="", encoding = 'utf-8-sig')
WordWrite = csv.writer(WordTable)
for row in WordOut:

    print(row[0])
    row = row + [Translator().translate(row[0], src = 'en', dest='es').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='ar').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='zh-CN').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='ru').text]
    #printing length or english alphabet works, but errors on special characters
WordWrite.writerow(row)

Окну Cmd не нравится не английский алфавит, и если вы используете этот точный код. Шоу дополнительных тестов:

  1. с использованием, encoding = 'utf8') в функции open (), .text в переводе, печатает специальные символы в файле csv, но неправильные (испанский хорошо, остальные три нет)
  2. без использования кодировки в функции open (), .text в функции перевода, выдает UnicodeEncodeError (тот, что указан выше)
  3. любой тип кодировки вообще после того, как тексты перевода дают (как, например, translationstuff.text.encoding ('что-то') дает косую черту как вывод в файле csv. Пример ячейки (для русского языка это означает русский язык): b '\ xd0 \ xba \ xd1 \ x81 \ xd0 \ xb5 \ xd0 \ xb2 \ xd0 \ xb5 \ xd1 \ x80 \ xd1 \ x83'

Что я думаю, что происходит (проверяю это для будущих ситуаций, я не очень хорошо знаю программирование): Python 3 отлично читает текст. Если я пытаюсь кодировать текст, Python думает, что это обычный текст (эта часть сбивает с толку), и отправляет его в CSV, чтобы получить последовательности слэша, написанные выше. CSV обычно не работает с неанглийскими символами, поэтому выдает ошибку, если я не напишу его в другом формате (и формат должен быть, очевидно, правильным, или символы неправильные)

...