非拉丁字符下划线 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"?
我建议:
POST
带有明确的 Content-Type: application/json
header 和 charset=utf-8
字段集。 (x-www-form-urlencoded
不支持 charset
字段)。
- 确保您的终端使用的是 UTF-8
- 也可以使用 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": "毎日熱心に練習することは避けられない改善を意味します。"
}
]
}
}
希望对您有所帮助
我正在尝试使用 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"?
我建议:
POST
带有明确的Content-Type: application/json
header 和charset=utf-8
字段集。 (x-www-form-urlencoded
不支持charset
字段)。- 确保您的终端使用的是 UTF-8
- 也可以使用 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": "毎日熱心に練習することは避けられない改善を意味します。"
}
]
}
}
希望对您有所帮助