是否可以使用Nodejs URL模块对二进制数据进行url编码?
例如,字节组 \ x12 \ x34 \ x56 \ x78 \ x9a 一旦编码,就等同于%124Vx%9a 。
在Python中执行此操作没有问题:
>>> urllib.parse.urlencode({'q':b'\x12\x34\x56\x78\x9a'})
'q=%124Vx%9A'
在Nodejs中尝试此操作,我得到的编码错误为%124Vx%EF%BF%BD :
> u = new URL('http://www.google.com');
> qvar = Buffer('123456789a','hex')
<Buffer 12 34 56 78 9a>
> u.searchParams.set('q',qvar.toString('utf8'))
> u
URL {
href: 'http://www.google.com/?q=%124Vx%EF%BF%BD',
origin: 'http://www.google.com',
protocol: 'http:',
username: '',
password: '',
host: 'www.google.com',
hostname: 'www.google.com',
port: '',
pathname: '/',
search: '?q=%124Vx%EF%BF%BD',
searchParams: URLSearchParams { 'q' => '\u00124Vx�' },
hash: ''
}
如果我可以将字节缓冲区直接传递给 searchParams.set(),我想我会很幸运。 URL 对象需要使用字符串作为其参数,因此如何将原始十六进制转换为将其正确引用的字符串?
答案 0 :(得分:1)
%124Vx%9A
的缓冲区中检索<Buffer 12 34 56 78 9a>
的值。如果我的理解是正确的,作为一种方法,如何使用encoding.js模块?请认为这只是几个答案之一。
首先,请按如下所示安装encoding.js。
$ npm install encoding-japanese
示例脚本如下。
var Encoding = require('encoding-japanese');
u = new URL('http://www.google.com');
qvar = Buffer.from('123456789a','hex');
console.log(qvar);
var encoded = Encoding.urlEncode(qvar);
console.log(encoded);
u.searchParams.set('q', encoded);
console.log(u);
<Buffer 12 34 56 78 9a>
%124Vx%9A
URL {
href: 'http://www.google.com/?q=%25124Vx%259A',
origin: 'http://www.google.com',
protocol: 'http:',
username: '',
password: '',
host: 'www.google.com',
hostname: 'www.google.com',
port: '',
pathname: '/',
search: '?q=%25124Vx%259A',
searchParams: URLSearchParams { 'q' => '%124Vx%9A' },
hash: ''
}
%
的{{1}}的值进行编码,该怎么办?
%124Vx%9A
如果我误解了您的问题,而这不是您想要的结果,我深表歉意。