非拉丁字符是RESTful Google Translate API v2下的下划线

时间:2019-03-19 19:54:44

标签: google-cloud-platform google-translate

我正尝试使用here中所述的Google翻译API中的Google翻译方法,但是由于某种原因,我得到的翻译用下划线代替了非拉丁字符。

例如,在命令行上使用curl:

sortRelatives

与translate.google.com的英语到德语结果进行比较:

$ 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."
      }
    ]
  }
}

当目标是日语(不包含拉丁字符)这样的语言时,这尤其糟糕:

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

也许这是试用帐户的限制?但是,我在此文档中没有看到任何东西可以表明这一点。

3 个答案:

答案 0 :(得分:0)

我相信这是一个字符串编码问题。

我假设您的HTTP请求正文是使用application/x-www-form-urlencoded-发送的,它不支持0x7F(128)以上的字符作为文字文本,请参见此处:{{3 }}

我建议:

  1. POST,带有显式的Content-Type: application/json标头,其中包含charset=utf-8字段。 (x-www-form-urlencoded不支持charset字段)。
  2. 确保您的终端使用的是UTF-8
  3. 还可以使用Wireshark之​​类的工具进行查看,或者使用fetch在JavaScript中创建请求,并使用Chrome的开发人员工具的“网络”标签的“复制为cURL(Bash)”命令来获取要使用的终端命令。

答案 1 :(得分:0)

有点令人尴尬的是,这实际上只是tmux的问题,我正在使用的终端多路复用器读取我对Translation API的每个调用的输出,包括curl和打印输出我正在编写的代码的输出。

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

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

答案 2 :(得分:0)

我刚刚尝试了以下请求,但效果很好:

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

希望有帮助