gpt4 book ai didi

node.js - 在 node.js 中使用 windows-1252 字符集对表单数据进行 urlencoding

转载 作者:搜寻专家 更新时间:2023-11-01 00:39:44 24 4
gpt4 key购买 nike

我需要发布一个已设置为使用 windows-1252 字符集对其数据进行 urlencoding 的表单。对于简单字符,默认编码 (utf8) 有效,但特殊字符必须使用所需的字符集进行编码。

我正在使用的 npm“request”包不允许设置任何特定的字符集,默认情况下使用 utf8。我尝试了另一个包“ReSTLer”,它允许设置编码但是当我指定 windows-1252 时它抛出异常说无效字符集(Node 只提供少数编码字符集(Buffer 类)而 windows-1252 不是其中之一) .

请让我知道我正在尝试实现的目标在 node 中是否可行?出于验证目的,我在 java 中创建了一个小客户端,并使用了带有 windows-1252 编码的 apache 的 http 客户端库,我的请求已被服务器成功接受。到目前为止,我还无法在 Node 中解决这个问题。

最佳答案

在 Node 中以 Windows-1252 等传统编码发送 HTTP 请求数据并不简单,因为这些编码没有 native 支持。

可以以 iconv 库的形式添加支持,因此它绝对可行,即使它不是开箱即用的。

以下目标restler ,因为您正在使用它,但原则上这适用于任何客户端 HTTP 库。

注意事项:

  • 传统的 HTTP POST 是 URL 编码的,我们将使用 qs为此。
  • 对 UTF-8 以外的编码的支持将由 qs-iconv 提供,如 qs - Dealing with special character sets 中所述.
  • 如果您将数据作为字符串或纯对象传递,ReSTLer 通常会将数据编码为 UTF-8,但如果您传递一个 Buffer,ReSTLer 将按原样发送。
  • 设置适当的Content-TypeContent-Length 将确保接收端可以正确解释数据。由于我们在此处提供自己的数据,因此我们需要手动设置这些 header 。
  • 请注意,任何不包含在目标字符集中的字符(在本例中为 Windows-1252)被 iconv 编码为 ?(% 3F 以 URL 形式),因此将丢失。

代码:

var rest = require('restler');
var qs = require('qs');
var win1252 = require('qs-iconv/encoder')('win1252');

var requestData = {
key1: "‘value1‘",
key2: "‘value2‘"
};

var requestBody = qs.stringify(requestData, { encoder: win1252 });
// => "key1=%91value1%91&key2=%91value2%91"

var requestBuf = new Buffer(requestBody);

rest.post('your/url', {
data: requestBuf,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=windows-1252',
'Content-Length': requestBuf.length
}
}).on('complete', function(data) {
console.log(data);
});

关于node.js - 在 node.js 中使用 windows-1252 字符集对表单数据进行 urlencoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38896686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com