Python googletrans编码奇怪的字符

时间:2019-04-22 15:26:24

标签: python character-encoding google-translate

我有一个ui,其中包括德语,并将其翻译成英语句子。

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

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

有时候我从翻译员那里得到奇怪的字符。 例如:

DE: Pascal和PHP开发了软件和技术开发人员。

googletrans EN(utf8): Pascal和PHP是面向软件开发人员和工程师的编程语言。

这是utf8格式的字符串的外观。当我使用Windows textEditor打开它时,它看起来像这样:

googletrans ZH: Pascal和PHP是针对软件开发人员和工程师的编程语言。

在“ 用于软件”之前,您看到的是2个奇怪的字符,translate()函数将返回这些字符。这些字符也在“ googletrans EN(utf8)”字符串中。您看不到它们,但是当您使用箭头键跳过字符串时,两次单击都不会将光标移至“ 用于软件”。因此角色在那里但没有看到。 (也许您不能在这里这样做,因为该字符串已经从网站上格式化了)

有时候还会出现其他字符,翻译后看不到。

我需要消除这些字符。我不能只使用ascii,因为我还需要在txt文件中保护德语字符,例如“ ö,ä,ü,ß”。这可能只是我不了解的编码问题,还是那里出了什么问题?

1 个答案:

答案 0 :(得分:1)

翻译后的文本包含两个嵌入式零宽度空格(\u200b')字符。

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

文本编辑器似乎将文件解码为cp1252(或类似的MS 8位编码),因此是mojibake

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

这是known bug的Google翻译API。在修复之前,您可以使用str.replace创建一个不包含以下字符的新字符串

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