非拉丁字符下划线 RESTful Google 翻译 API v2

Non-Latin characters are underscores under RESTful Google Translate API v2

我正在尝试使用 Google 的翻译方法,其翻译 API 已记录 here,但出于某种原因,我得到的翻译将非拉丁字符替换为下划线。

例如,在命令行上使用 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": "______________________________________________________"
      }
    ]
  }
}

也许这是试用帐户的限制?但是,我在此文档中看到的任何内容都不会表明这一点。

我认为这是一个 string-encoding 问题。

我假设您的 HTTP 请求 body 是使用 application/x-www-form-urlencoded 发送的 - 不支持 0x7F (128) 以上的字符作为文字文本,请看这里:application/x-www-form-urlencoded and charset="utf-8"?

我建议:

  1. POST 带有明确的 Content-Type: application/json header 和 charset=utf-8 字段集。 (x-www-form-urlencoded 不支持 charset 字段)。
  2. 确保您的终端使用的是 UTF-8
  3. 也可以使用 Wireshark 等工具查看,或者使用 fetch 在 JavaScript 中创建请求并使用 Chrome 的开发人员工具的网络选项卡的 "Copy as cURL (Bash)"命令获取要使用的终端命令。

有点尴尬,这实际上只是 tmux 的问题,终端多路复用器是我用来读取我对翻译 API 进行的每次调用的输出的,两者都是 [=11] =] 以及我正在编写的代码的打印输出。

根据 this Ask Ubuntu answer to someone else's tmux question,这可以通过明确告诉 tmux 使用 UTF-8 支持启动来解决,即 tmux -u.

感谢 Dai 和 Daniel 指出潜在的终端问题。

我刚刚尝试了以下请求并且效果很好:

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": "毎日熱心に練習することは避けられない改善を意味します。"
      }
    ]
  }
}

希望对您有所帮助