Нелатинские символы подчеркиваются в RESTful Google Translate API v2 - PullRequest
1 голос
/ 19 марта 2019

Я пытаюсь использовать метод перевода Google из его API-интерфейса перевода, как описано здесь , но по некоторым причинам переводы, которые я получаю, заменяют нелатинские символы подчеркиванием.

Например, с помощью curl в командной строке:

$ curl -X POST 'https://translation.googleapis.com/language/translate/v2/?source=en&target=de&q=Practicing+diligently+each+day+means+inevitable+improvement.&key=MY_API_KEY'  
{
  "data": {
    "translations": [
      {
        "translatedText": "T_glich flei_ig zu _ben, bedeutet unausweichliche Verbesserung."
      }
    ]
  }
}

Сравните с англо-немецким результатом translate.google.com:

.
Täglich fleißig zu üben, bedeutet unausweichliche Verbesserung.

Особенно плохо, когда целью является язык, подобный японскому, который не содержит латинских символов:

$ curl -X POST 'https://translation.googleapis.com/language/translate/v2/?source=en&target=ja&q=Practicing+diligently+each+day+means+inevitable+improvement.&key=MY_API_KEY' 
{
  "data": {
    "translations": [
      {
        "translatedText": "______________________________________________________"
      }
    ]
  }
}

Может быть, это ограничение пробной учетной записи? Ничто из того, что я видел в этих документах, не указывало бы на это.

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

Довольно смущающе, но на самом деле это была просто проблема с tmux, терминальным мультиплексором, который я использовал для чтения выходных данных каждого вызова, который я сделал в API перевода, как с curl, так и с выводом кода на печать.Я писал.

Согласно этому ответу Ask Ubuntu на чей-либо tmux вопрос , это можно исправить, явно указав tmux запустить с поддержкой UTF-8, то есть tmux -u.

Спасибо Дай и Даниэлю за указание на потенциальную проблему с терминалом.

0 голосов
/ 20 марта 2019

Я только что попытался с помощью следующего запроса, и он работал хорошо:

curl -X POST "https://translation.googleapis.com/language/translate/v2?key=MY_API_KEY" \
-H "Content-Type: application/json" \
--data "{
        'q': 'Practicing diligently each day means inevitable improvement.',
        'source': 'en',
        'target': 'de'
}"

Предоставление этого вывода:

{
  "data": {
    "translations": [
      {
        "translatedText": "Täglich fleißig zu üben, bedeutet unausweichliche Verbesserung."
      }
    ]
  }
}

А для японского выхода:

{
  "data": {
    "translations": [
      {
        "translatedText": "毎日熱心に練習することは避けられない改善を意味します。"
      }
    ]
  }
}

Надеюсь, это поможет

0 голосов
/ 19 марта 2019

Я полагаю, что это проблема кодировки строки.

Я предполагаю, что ваше тело HTTP-запроса отправляется с использованием application/x-www-form-urlencoded - , который не поддерживает символы выше 0x7F (128) в качестве литерального текста., см. Здесь: application / x-www-form-urlencoded и charset = "utf-8"?

Я предлагаю:

  1. POST с явным заголовком Content-Type: application/json с установленным полем charset=utf-8.(x-www-form-urlencoded не поддерживает поле charset).
  2. Убедитесь, что ваш терминал использует UTF-8
  3. Также посмотрите, используя такой инструмент, как Wireshark, или создайте запрос в JavaScriptиспользуя fetch и используйте команду «Копировать как cURL (Bash)» на вкладке «Сеть» в Chrome «Инструменты разработчика», чтобы получить команду терминала для использования.
...