Python googletrans, кодирующий странные символы - PullRequest
1 голос
/ 22 апреля 2019

У меня есть пользовательский интерфейс, который берет немецкий язык среди прочего и переводит их в английские предложения.

# -*- coding: utf-8 -*-
from googletrans import Translator

def tr(s)
  translator =  Translator()
  return translator.translate(wordDE,src='de',dest='en').text

Иногда я получаю странные символы от переводчика. Например:

DE: Pascal und PHP sind Programmiersprachen für Softwareentwickler und Ingenieure.

googletrans EN (utf8): Pascal и PHP - языки программирования для разработчиков и инженеров программного обеспечения.

Так выглядит строка в формате utf8. Когда я открываю его с помощью Windows textEditor, это выглядит так:

googletrans RU: Pascal и PHP являются языками программирования для разработчиков и инженеров программного обеспечения.

Как вы можете видеть перед " для программного обеспечения ", это 2 странных символа, которые возвращает функция translate (). Эти символы также находятся в строке "googletrans EN (utf8)". Вы не можете их видеть, но когда вы пропускаете строку с помощью клавиш со стрелками, курсор не перемещается для « для программного обеспечения » в течение 2 кликов. Так что персонажи есть, но не видны. (Может быть, вы не можете сделать это здесь, потому что строка уже отформатирована с веб-сайта)

Иногда встречаются и другие символы, которые не видны после перевода.

Мне нужно убрать этих персонажей. Я не могу использовать только ascii, потому что мне нужно сохранить также немецкие символы, такие как " ö, ä, ü, ß " в txt-файле. Может быть, это просто проблема с кодировкой, которую я не понимаю или что там не так?

1 Ответ

1 голос
/ 22 апреля 2019

Переведенный текст содержит два встроенных пробела нулевой ширины (\u200b').

>>> res = t.translate(wordDE, src='de', dest='en').text
>>> res
'Pascal and PHP are programming languages \u200b\u200bfor software developers and engineers.'

Текстовый редактор отображается для декодирования файла как cp1252 (или аналогичная 8-битная кодировка MS), следовательно, mojibake :

>>> res.encode('utf-8').decode('cp1252')
'Pascal and PHP are programming languages ​​for software developers and engineers.'

Это известная ошибка это Google Translate API. В ожидании исправления вы можете использовать str.replace для создания новой строки , которая не содержит следующие символы:

>>> new_res = res.replace('\u200b', '')
>>> new_res
'Pascal and PHP are programming languages for software developers and engineers.'
...