【问题标题】:UTF8 character encoding using node Request module使用节点请求模块的 UTF8 字符编码
【发布时间】:2015-05-14 07:58:56
【问题描述】:

我有一个简单的应用程序,它使用 jquery ajax 请求将表单数据发送到节点服务器,然后节点服务器使用节点 js 的请求模块提交给第三方 api。

我遇到的问题是重音(和其他类似)字符在到达第三方服务器时未正确编码。例如 é 被记录为 é

我相当确定这与 Request 的设置有关,因为当我绕过 ajax 调用时得到相同的结果。

这是我正在使用的设置:

html:

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

jquery ajax 设置:

type        : 'POST',
url         : '/api',
data        : formData, // A json object
dataType    : 'json',
ContentType : 'text/html; charset=utf-8'

节点中的请求模块设置(ajax post和请求发送之间的表单数据没有发生任何事情):

request.post({
    url: "https://testurl.com/api/",
    form: formData,
    headers: {'Content-Type': 'application/json; charset=utf-8'}
} ...

我已经阅读了各种 SO 解决方案,但都没有成功,因此非常感谢任何建议。

【问题讨论】:

  • 您是否尝试将请求的“编码”选项专门设置为“utf-8”?您的应用程序堆栈中有正文解析器吗? (那么在将 formData 分配给 request 之前,它实际上是否被解析为 JSON 或者它仍然是一个字符串?)。当您在节点服务器上console.log(formData) 时会发生什么?
  • 是的,我试过encoding: 'utf-8',结果相同。我正在使用 Body Parser:app.use(bodyParser.urlencoded({ extended: false }));app.use(bodyParser.json()); 当我在 formData 发出请求之前记录它时,我得到了一个看起来像 javascript 对象的东西 { first_name: 'é' }
  • 您说绕过 ajax 调用会得到“相同的结果”?您的意思是直接将数据发送给第三方?然后就可以了?
  • 我的意思是当我在节点服务器上使用 Request post 路由而不涉及 ajax 时,我仍然得到不正确的字符。如果我直接发布给第三方,我不会收到错误消息(使用他们的端点而不涉及节点或 ajax)。这表明问题出在 Request 上。
  • 尝试设置encoding: 'utf8'(不带破折号)-根据这里的线程它很冷是解决方案:stackoverflow.com/questions/8332500/…

标签: javascript jquery ajax node.js character-encoding


【解决方案1】:

在研究字符编码后,我发现问题与各种字符的多字节编码有关(快速谷歌会发现一些关于该主题的不错的 SO 帖子)。

我觉得 Request 没有自动处理这个问题很奇怪,所以我尝试了 Request 语法并设法解决了这个问题。这是我修改后的代码:

request(
    {
        url: 'https://testurl.com/api/',
        method: 'POST',
        json: true,
        headers: {
            'content-type': 'application/json'
        },
        body: formData
    },
    function (error, response, body) {
        ...     
    }
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多