我在node.js上使用请求模块,但编码选项存在问题。代码下面是简单的帖子请求,但我不知道如何设置表单字段数据的编码。我已经将标题设置为'Content-Type': 'application/x-www-form-urlencoded; charset=euc-kr'
但它不起作用。现场数据是韩国的,比如“안녕하세요”,我应该用 euc-kr 编码发布。 (该网站采用euc-kr,而不是utf8)
Java应用程序上的相同程序,我编码如下:
PrintWriter wr = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "euc-kr"));
但我不知道如何在nodejs中。谁能给出一些解决方案......?
代码示例
//Load the request module
var request = require('request');
//Lets configure and request
request({
url: 'http://google.com', //URL to hit
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=euc-kr' },
method: 'POST',
form: {
field1: 'data',
field2: 'data'
}
}, function(error, response, body){
if(error) {
console.log(error);
} else {
console.log(response.statusCode, body);
}
});
答案 0 :(得分:2)
最后我得到了灵魂,我解决了这个问题。
如果使用请求模块将数据作为表单发送,则模块会强制将表单编码更改为utf-8。因此,即使您将表单编码设置为另一个字符集,模块也会再次将您的字符集更改为utf8。您可以在1120-1130行的request.js上看到。
所以,您最好通过' body'发送数据。选项,而不是'形式'选项。
答案 1 :(得分:1)
节点不支持EUC-KR
,因此您可以使用iconv-lite
扩展可用的原始编码,并在encoding
中设置request
选项。
List of Natively Supported Encodings
iconv.extendNodeEncodings();
仅适用于节点pre v4 +。请参阅here以使其适用于较新版本的节点。
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();