Google 翻译 API returns 非 UTF8 字符
Google Translate API returns non UTF8 characters
解决
解决方法见文末post
晚上好。
我正在尝试使用 google 翻译 v3 api。
我遇到了一个神秘的编码问题。
我这样做 :
def translate_text_langueTarget(texteToTranslate, langueTarget):
parent = client.location_path(project_id, location)
langueOrigin = detect_language(texteToTranslate)
if (langueOrigin == "en" and langueTarget == "en"):
return(texteToTranslate)
try:
response = client.translate_text(
parent=parent,
contents=[texteToTranslate],
mime_type='text/plain',
source_language_code=langueOrigin,
target_language_code=langueTarget)
translatedTexte = str(response.translations)[19:-3]
except:
translatedTexte = "Sorry my friend, the translation is lost on the internet"
print(response)
print(type(response))
print(response.translations)
print(type(response.translations))
return(translatedTexte)
我称之为
stringToTrad = "prefer"
langTarget = "fr"
translateString = translate_text_langueTarget(stringToTrad, langTarget)
我希望得到“préféré”的回答
但我得到:
“pr31f31rer”
我尝试通过在我的代码中进行一些调试来解决这个错误,方法是:
print(response)
print(type(response))
print(response.translations)
print(type(response.translations))
我认为这是编码问题,但我找不到问题的答案。
我在 python 工作,我的股票是 tag :
#! /usr/bin/env python3
# coding: utf-8
在header
你有什么想法吗?
解决。
我使用:
translatedTexte = codecs.escape_decode(translatedTexte)[0]
translatedTexte = translatedTexte.decode("utf8")
API of Google Translate 为您提供 UTF-8 文本。
你得到 c3 a9
(303 251 作为八进制数),正如预期的那样,它实际上是 é
。
因此您的代码采用正确的 UTF-8 文件并将其写入可能是错误的编码。
这句话只是一个神话,没有用:
# coding: utf-8
如果您希望您的代码将输入和输出解释为 UTF-8,您应该明确说明。对于您的代码,我假设(一个问题)是您使用打印(最好写入文件)。在 Windows 上,默认情况下,终端不是 UTF-8,而是旧的“Windows ANSI like and extended also known as Windows 1252”编码。
所以写入一个文件(使用明确的 UTF-8 编码),或者只是更改终端设置,以获得 UTF-8 终端。此外,您可能在结果中有转义序列。对我来说,以八进制方式编写结果闻起来很香。不考虑标准 Python (它会抱怨错误的编码)。您可能需要解析响应,以翻译转义序列。
显然,来自 API 的响应是 html 编码的(因此它是包装在 html 编码中的 UTF-8,也用于 URL 编码)。
解决方法很简单。
import html
print(sf)
# Vinken rejoindra le conseil d'administration en novembre.
print(html.unescape(sf))
# Vinken rejoindra le conseil d'administration en novembre.
+信息
解决 解决方法见文末post
晚上好。
我正在尝试使用 google 翻译 v3 api。
我遇到了一个神秘的编码问题。
我这样做 :
def translate_text_langueTarget(texteToTranslate, langueTarget):
parent = client.location_path(project_id, location)
langueOrigin = detect_language(texteToTranslate)
if (langueOrigin == "en" and langueTarget == "en"):
return(texteToTranslate)
try:
response = client.translate_text(
parent=parent,
contents=[texteToTranslate],
mime_type='text/plain',
source_language_code=langueOrigin,
target_language_code=langueTarget)
translatedTexte = str(response.translations)[19:-3]
except:
translatedTexte = "Sorry my friend, the translation is lost on the internet"
print(response)
print(type(response))
print(response.translations)
print(type(response.translations))
return(translatedTexte)
我称之为
stringToTrad = "prefer"
langTarget = "fr"
translateString = translate_text_langueTarget(stringToTrad, langTarget)
我希望得到“préféré”的回答
但我得到: “pr31f31rer”
我尝试通过在我的代码中进行一些调试来解决这个错误,方法是:
print(response)
print(type(response))
print(response.translations)
print(type(response.translations))
我认为这是编码问题,但我找不到问题的答案。
我在 python 工作,我的股票是 tag :
#! /usr/bin/env python3
# coding: utf-8
在header
你有什么想法吗?
解决。 我使用:
translatedTexte = codecs.escape_decode(translatedTexte)[0]
translatedTexte = translatedTexte.decode("utf8")
API of Google Translate 为您提供 UTF-8 文本。
你得到 c3 a9
(303 251 作为八进制数),正如预期的那样,它实际上是 é
。
因此您的代码采用正确的 UTF-8 文件并将其写入可能是错误的编码。
这句话只是一个神话,没有用:
# coding: utf-8
如果您希望您的代码将输入和输出解释为 UTF-8,您应该明确说明。对于您的代码,我假设(一个问题)是您使用打印(最好写入文件)。在 Windows 上,默认情况下,终端不是 UTF-8,而是旧的“Windows ANSI like and extended also known as Windows 1252”编码。
所以写入一个文件(使用明确的 UTF-8 编码),或者只是更改终端设置,以获得 UTF-8 终端。此外,您可能在结果中有转义序列。对我来说,以八进制方式编写结果闻起来很香。不考虑标准 Python (它会抱怨错误的编码)。您可能需要解析响应,以翻译转义序列。
显然,来自 API 的响应是 html 编码的(因此它是包装在 html 编码中的 UTF-8,也用于 URL 编码)。
解决方法很简单。
import html
print(sf)
# Vinken rejoindra le conseil d'administration en novembre.
print(html.unescape(sf))
# Vinken rejoindra le conseil d'administration en novembre.
+信息