Nodejs中url编码时怎么让其编码结果为gbk而不是utf8的

Nodejs中url编码时怎么让其编码结果为gbk而不是utf8的

var querystring = require(“querystring”);
var data = {“username”: “张三”, “password”: “12345”};
var content = querystring.stringify(data);
console.log(content);

输出结果为:username=%E5%BC%A0%E4%B8%89&password=12345

怎么让其结果显示:

username=%D5%C5%C8%FD&password=12345


3 回复

要在Node.js中实现URL编码时使用GBK而不是默认的UTF-8编码,可以利用第三方库如iconv-lite来完成。以下是一个具体的实现示例:

示例代码

首先,你需要安装iconv-lite库。可以通过npm安装:

npm install iconv-lite

然后你可以使用以下代码进行GB2312编码:

const querystring = require('querystring');
const iconv = require('iconv-lite');

// 待编码的数据
let data = { username: '张三', password: '12345' };

// 将数据转换成字符串并用encodeURIComponent进行编码
let encodedData = querystring.stringify(data);

// 将编码后的字符串转换为Buffer对象
let buffer = Buffer.from(encodedData, 'binary');

// 使用iconv-lite将Buffer对象从GBK编码转换为Buffer
let gbkBuffer = iconv.encode(buffer, 'gbk');

// 将Buffer转换为十六进制字符串
let hexString = gbkBuffer.toString('hex').match(/.{1,2}/g).join('%');

// 输出结果
console.log(hexString);

解释

  1. 引入必要的模块querystring用于处理查询字符串,iconv-lite用于进行字符集转换。
  2. 准备数据:定义一个包含用户名和密码的对象。
  3. 字符串化数据:使用querystring.stringify()方法将对象转换为查询字符串。
  4. 转换为Buffer:使用Buffer.from()方法将查询字符串转换为Buffer对象。
  5. GB2312编码:使用iconv.encode()方法将Buffer对象从默认的UTF-8编码转换为GB2312编码。
  6. 格式化输出:将转换后的Buffer对象转换为十六进制字符串,并以%分隔每个字节。

通过上述步骤,你可以实现将URL编码的结果转换为GB2312编码。这将使输出结果符合你的需求,即显示为username=%D5%C5%C8%FD&password=12345


在Node.js中,默认情况下,querystring.stringify() 方法会使用UTF-8编码。如果你希望将字符串编码为GBK格式,可以使用iconv-lite库来实现这一目标。以下是如何修改你的代码以实现GBK编码:

首先,你需要安装iconv-lite库:

npm install iconv-lite

然后你可以修改你的代码如下:

const querystring = require('querystring');
const iconv = require('iconv-lite');

// 要编码的数据
var data = {"username": "张三", "password": "12345"};

// 将对象转换成查询字符串(默认是UTF-8)
var content = querystring.stringify(data);

// 将查询字符串转换为Buffer对象
var buffer = Buffer.from(content, 'utf8');

// 使用iconv-lite进行GBK编码
var gbkEncoded = iconv.encode(buffer, 'gbk');

// 打印编码后的结果
console.log(gbkEncoded.toString('hex'));

这段代码首先使用querystring.stringify()方法生成一个标准的URL编码字符串,然后将其转换为Buffer对象。最后,通过iconv-lite.encode()方法将Buffer对象从UTF-8编码转换为GBK编码。

注意,最终打印出来的GBK编码后的字符串是以十六进制表示的,这是因为Buffer对象默认使用十六进制表示形式。如果你想直接看到GBK编码的字符,可以考虑使用iconv-lite库提供的其他方法或调整输出方式。

回到顶部