Как интерпретировать строки, содержащие `\ ###` (# - цифра)? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть английский текст 'Slouchy Cable Knit Cardigan', который нужно перевести на испанский язык.Ответ должен быть 'Cárdigan holgado de punto', но когда Python вернул этот текст из Google API в переводе, я получил это "C\303\241rdigan holgado de punto".

from google.cloud import translate_v3beta1 as translate

client = translate.TranslationServiceClient()

project_id = ''
location = 'global'

parent = client.location_path(project_id, location)
response = client.translate_text(
    parent=parent,
    contents =['Slouchy Cable Knit Cardigan'],
    mime_type='text/plain',  # mime types: text/plain, text/html
    source_language_code='en',
    target_language_code='es')

print(response.translations)

Translated Text: translated_text: "C\303\241rdigan holgado de punto"

Есть ли безболезненный способ решения этой проблемы?

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

То, что вы получаете, является двоичным представлением ваших данных.

Если translated_text - это Python str, он, вероятно, использует latin1 кодировку текста utf-8.Преобразование его в bytes и затем обратно в str с использованием правильной кодировки должно решить проблему:

text = 'C\303\241rdigan holgado de punto'
print(text)
# Cárdigan holgado de punto
print(text.encode('latin1').decode('utf8'))
# Cárdigan holgado de punto

(К сожалению, я не могу проверить ваш полный код, поскольку у меня нет действительных учетных данных API Google -и они не доступны бесплатно).

0 голосов
/ 20 сентября 2019

Также одним из решений будет использование MessageToDict ()

from google.cloud import translate_v3beta1 as translate
from google.protobuf.json_format import MessageToDict

client = translate.TranslationServiceClient()

project_id = ''
location = 'global'

parent = client.location_path(project_id, location)
response = client.translate_text(
    parent=parent,
    contents =['Slouchy Cable Knit Cardigan'],
    mime_type='text/plain',  # mime types: text/plain, text/html
    source_language_code='en',
    target_language_code='es')

for translation in response.translations:
   print(MessageToDict(translation))

{'translatedText': 'Cárdigan holgado de punto'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...