如何在node.js上使用请求模块设置POST编码?

如何在node.js上使用请求模块设置POST编码?,node.js,request,Node.js,Request,我在node.js上使用请求模块,但编码选项有问题。下面的代码是简单的post请求,但我不知道如何设置表单字段数据的编码。我已经将标题设置为“内容类型”:“application/x-www-form-urlencoded;charset=euc kr'但它不起作用。字段数据是韩语的,比如안녕하세요, 我应该用euc-kr编码发布它。该站点采用euc kr,而不是utf8 Java应用程序上的相同程序,我的代码如下: PrintWriter wr=新的PrintWriternew OutputS

我在node.js上使用请求模块,但编码选项有问题。下面的代码是简单的post请求,但我不知道如何设置表单字段数据的编码。我已经将标题设置为“内容类型”:“application/x-www-form-urlencoded;charset=euc kr'但它不起作用。字段数据是韩语的,比如안녕하세요, 我应该用euc-kr编码发布它。该站点采用euc kr,而不是utf8

Java应用程序上的相同程序,我的代码如下:

PrintWriter wr=新的PrintWriternew OutputStreamWriterconn.getOutputStream,euc kr

但我不知道如何在nodejs。谁能给出一些解决方案

代码示例

节点不支持EUC-KR,因此可以使用扩展可用的本机编码,并在请求中设置编码选项

iconv.extendNodeEncodings;仅适用于v4+之前的节点。请参阅以使此功能适用于较新版本的node

var iconv = require('iconv-lite');
var request = require('request');

// This will add to the native encodings available.
iconv.extendNodeEncodings();

request({
  url: 'http://google.com', //URL to hit
  method: 'POST',
  form: {
    field1: 'data',
    field2: 'data'
  },
  encoding: 'EUC-KR'
}, function(error, response, body){
  if(error) {
    console.log(error);
  } else {
    console.log(response.statusCode, body);
  }
});

iconv.undoExtendNodeEncodings();
节点不支持EUC-KR,因此可以使用扩展可用的本机编码,并在请求中设置编码选项

iconv.extendNodeEncodings;仅适用于v4+之前的节点。请参阅以使此功能适用于较新版本的node

var iconv = require('iconv-lite');
var request = require('request');

// This will add to the native encodings available.
iconv.extendNodeEncodings();

request({
  url: 'http://google.com', //URL to hit
  method: 'POST',
  form: {
    field1: 'data',
    field2: 'data'
  },
  encoding: 'EUC-KR'
}, function(error, response, body){
  if(error) {
    console.log(error);
  } else {
    console.log(response.statusCode, body);
  }
});

iconv.undoExtendNodeEncodings();

最后我得到了一个解决方案,我解决了这个问题

如果使用请求模块以表单形式发送数据,则该模块会强制将表单编码更改为utf-8。因此,即使您将表单编码设置为另一个字符集,模块也会再次将您的字符集更改为utf8。您可以在第1120-1130行的request.js中看到这一点


所以,您最好通过“body”选项而不是“form”选项发送数据。

最后我得到了一个解决方案,我解决了这个问题

如果使用请求模块以表单形式发送数据,则该模块会强制将表单编码更改为utf-8。因此,即使您将表单编码设置为另一个字符集,模块也会再次将您的字符集更改为utf8。您可以在第1120-1130行的request.js中看到这一点


因此,您最好通过“body”选项而不是“form”选项发送数据。

我使用的是最新版本的node,我不知道如何设置post编码,是否必须回滚我的node版本?如果我设置值val=iconv.encode안녕,euc-kr;但它工作不好,我将nodejs版本回滚到0.12,但它仍然不工作。我该怎么做…我在最新版本的节点上,我不知道如何设置post编码,我应该回滚我的节点版本吗?如果我设置值val=iconv.encode안녕,euc-kr;但它工作不好,我将nodejs版本回滚到0.12,但它仍然不工作。我该怎么做。。。