我有一个用户界面,它采用德语等内容并将其翻译成英语句子。
# -*- 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 格式中的外观。当我用窗口文本编辑器打开它时,它看起来像这样:
googletrans EN:Pascal和PHP是面向软件开发人员和工程师的编程语言。
正如你在">for software"之前看到的,有2个奇怪的字符,translate()函数返回这些字符。这些字符也在"googletrans EN(utf8)"字符串中。您看不到它们,但是当您使用箭头键跳过字符串时,光标不会为">for software"移动 2 次。所以角色在那里,但没有看到。(也许你不能在这里这样做,因为字符串已经从网站上格式化了)
有时还会出现翻译后看不到的其他字符。
我需要消除这些字符。我不能只使用 ascii,因为我还需要在 txt 文件中保护德语字符,如">ö,ä,ü,ß"。这可能只是一个我不明白的编码问题还是那里有什么问题?
翻译后的文本包含两个嵌入的零宽空格(u200b'
)字符。
>>> res = t.translate(wordDE, src='de', dest='en').text
>>> res
'Pascal and PHP are programming languages u200bu200bfor 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.'
这是一个已知的错误是谷歌翻译API。 等待修复,您可以使用 str.replace 创建一个不包含以下字符的新字符串:
>>> new_res = res.replace('u200b', '')
>>> new_res
'Pascal and PHP are programming languages for software developers and engineers.'