我有一个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文件中保护德语字符,例如“ ö,ä,ü,ß”。这可能只是我不了解的编码问题,还是那里出了什么问题?
答案 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.'