首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google翻译repsonse文本

Google翻译repsonse文本
EN

Stack Overflow用户
提问于 2018-11-29 00:36:44
回答 1查看 150关注 0票数 0

我正在构建一个小型命令行实用程序,以帮助我在nodejs中进行一些翻译。问题是,我从谷歌获得的回复文本被混淆了。据我所知,nodejs发送的是一个正确编码的请求,但它显然不是。如果我使用ANSI字符集,一切都按预期工作。主要的想法是不要把字符串放在源文件中,当然,我是这样做的,因为我正在努力解决问题。源代码被编码为UTF8,而我正在解析以获取所讨论的字符串的数据是UTF16 LE格式,但我认为这对本示例来说并不重要。

代码语言:javascript
复制
const https = require('https');

let uri = 'https://translate.googleapis.com/translate_a/single?client=gtx&sl=ru&tl=en&dt=t&q=Приобрести контейнеры с амуницией';

console.log(uri);
console.log(encodeURI(uri));
console.log(decodeURI(encodeURI(uri)));

https.get(encodeURI(uri), (res) =>
{
    const { statusCode } = res;
    let error;

    if (statusCode !== 200)
    {
        error = new Error('Request Failed: ' + statusCode);
    }

    if (error)
    {
        console.log(error.message);
        res.resume();
        return;
    }

    let data = '';

    res.on('data', (chunk) =>
    {
        console.log('chunks:', chunk);
        data += chunk;
    });

    res.on('end', () =>
    {
        let parsed;

        try {
            parsed = JSON.parse(data);
        } catch (e) {
            console.log('parsing error', e);
        }

        console.log(data.length, data);
        console.log(parsed[0][0][0]);
    });
}).on('error', (e) =>
{
    console.error(e);
});

这是我在命令行中得到的输出。

  1. 原始的uri
  2. 编码uri
  3. 被解码的编码uri
  4. 数据响应转储
  5. 响应字符串和字符串的大小
  6. json解码字符串

我假设nodejs正在向google发送一个错误的请求,但我不知道如何解决这个问题。

代码语言:javascript
复制
https://translate.googleapis.com/translate_a/single?client=gtx&sl=ru&tl=en&dt=t&q=Приобрести контейнеры с амуницией
https://translate.googleapis.com/translate_a/single?client=gtx&sl=ru&tl=en&dt=t&q=%D0%9F%D1%80%D0%B8%D0%BE%D0%B1%D1%80%D0%B5%D1%81%D1%82%D0%B8%20%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D1%8B%20%D1%81%20%D0%B0%D0%BC%D1%83%D0%BD%D0%B8%D1%86%D0%B8%D0%B5%D0%B9
https://translate.googleapis.com/translate_a/single?client=gtx&sl=ru&tl=en&dt=t&q=Приобрести контейнеры с амуницией
chunks: <Buffer 5b 5b 5b 22 d0 a0 d1 9f d0 a1 d0 82 d0 a0 d1 91 d0 a0 d1 95 d0 a0 20 c2 b1 20 d0 a1 d0 82 d0 a0 c2 b5 d0 a1 d0 83 d0 a1 2c 20 d0 a0 d0 81 d0 a0 d1 94 ... >
165 '[[["РџСЂРёРѕР ± ресС, РЁРєРѕРЅС‚РµР№РЅРµСЂС ‹СЃ Р ° РјСѓРЅРЁС † ией","Приобрести контейнеры СЃ амуницией",null,null,3]],null,"ru"]'
РџСЂРёРѕР ± ресС, РЁРєРѕРЅС‚РµР№РЅРµСЂС ‹СЃ Р ° РјСѓРЅРЁС † ией

如果我在浏览器中加载请求uri,就会得到预期的结果。

代码语言:javascript
复制
[[["Purchase containers with ammunition","Приобрести контейнеры с амуницией",null,null,3]],null,"ru"]
EN

回答 1

Stack Overflow用户

发布于 2018-11-29 11:28:10

好吧,新的一天伴随着新的想法。今天早上,我发现一些标题可能丢失了,结果是我的请求需要一个有效的用户代理来提供,但只适用于这些UTF请求。去想一想。不同的标题组合使响应更加混乱,因此需要一些猜测才能达到。

代码语言:javascript
复制
let headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0'
};

https.get(uri, { headers: headers }, (res) =>
{
    ...
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53530178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档