C++中的URL编码和nodejs中的解码
URL encoding in C++ and decoding in nodejs
我正在将数据从C++客户端传输到nodejs服务器。
我首先使用zlib deflate压缩字符串,然后使用curl_easy_escape对压缩的字符串进行url编码。
std::string s = zlib_compress(temp.str());
std::cout << s <<"n";
CURL *handle = curl_easy_init();
char* o = curl_easy_escape(handle, s.data(), s.size());
std::cout << o <<"n";
然后我用发送
std::string bin(o);
curl_easy_setopt(handle, CURLOPT_POSTFIELDSIZE, bin.size());
curl_easy_setopt(handle, CURLOPT_POSTFIELDS, bin.data());
curl_easy_perform(handle);
当我运行这个时,我得到的输出是:
x??с??Ҵ4?
x%DA%D3%D1%81%80%E2%92%D2%B44%1D%03%00%1BW%03%E5
现在,我在nodejs服务器上收到了第二个编码字符串。我现在试着解码。
var x = req.params;
for (var key in req.body)
{
console.log(key);
var x = unescape(key);
var buffer = new Buffer(x);
console.log(x);
zlib.inflate(buffer, function(err, buffer) {
console.log(err+" here");
});
}
哪个输出:
x%DA%D3%D1%81%80%E2%92%D2%B44%1D%03%00%1BW%03%E5
xÚÓÑâÒ´4å
Error: incorrect header check here
这里有什么问题?如何调试它?
您可以通过在C++和node.js代码中打印压缩字符串中每个字节的十进制值来调试它。对于C++,代码应该是:
for(int i=0; i<s.size(); i++) {
std::cout << static_cast<int>(s[i]);
}
在node.js代码中,您需要打印变量buffer
中包含的每个字节的十进制值。
如果C++和node.js部分中每个字节的十进制值都相同,则zlib
库不兼容或函数不匹配:例如,C++中的zlib_compress
可能与node.js中zlib.inflate
以外的其他部分相对应:可能存在类似zlib.decompress()
的函数。
根本原因可能是字符在C++std::string
中为1字节,在node.js中为2字节。如果是这样的话,在nodejs中构造Buffer时指定编码可能会解决问题:
var buffer = new Buffer(x, 'binary');
请参阅https://nodejs.org/api/buffer.html#buffer_new_buffer_str_encoding
由于数据在这里是zlib压缩的,或者在一般的压缩情况下,编码应该是binary
。
相关文章:
- 无法解码base64+deflate数据
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 使用已使用 java 编码的 openssl 解码数据
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- NodeJs 服务器充斥着 UDP 广播,不发送响应
- 从原始字节解码协议缓冲区(以 C++为单位)
- FFmpeg——使用硬件加速进行视频解码
- 如何从WIC解码器确定自上而下/自下而上?
- 在nodejs中使用本机代码的最佳方法是什么?
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- 使用公钥加密消息:BER 解码错误
- NodeJS:node-gyp 编译与等效的 gcc -lm 选项
- 在CRC-16 CCITT中将数据从二进制解码为文本,我应该输入一个码字,使用CRC生成器进行编码
- 在 GLFW 窗口中显示 FFMPEG 解码帧
- 如何将 MJPEG 解码为原始 RGB(或 YUV)数据
- 编译时 Base64 解码 C++
- 解码H264流时如何跳过帧?
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- C++中的URL编码和nodejs中的解码