在发请求post时候,中文字符串长度的坑
发布于 6 年前 作者 tank00 11715 次浏览 最后一次编辑是 2 年前

自己写一个脚本枉自己写的exprss的服务器发post请求,老是出错,后来发现是Content-Length的问题。

刚开始是这样写的: var headers = { ‘Content-Type’: ‘application/json’, ‘Content-Length’: sentString.length }; 中文的怎么都不行老是报json转换异常,英文就可以。 后来用下面的代码测试才知道原来string长度不等于buf的长度啊。

var str = JSON.stringify({words:'测试1234567890中文'});
console.log(str.length);
console.log(new Buffer(str).length);

打印结果如下:

26
34

自己果然是个小菜鸟!希望新手遇到这个问题的时候注意吧。 贴一下小脚本吧

var index = function()
{
 var str = new Buffer(JSON.stringify({words:'我的测试'}));
var headers = {
  'Content-Type': 'application/json',
  'Content-Length': str.length
};

console.log(str);
var options = {
  host: 'localhost',
  path: '/segment',
  port: 3000,
  method: 'POST',
  headers: headers
};

var request = http.request(options, function(response) 
{
  response.setEncoding('utf8');
  var buf = [];
  var size =0;
  response.on('data', function (chunk) 
  {
    var buftmp = new Buffer(chunk);
    buf.push(buftmp);
    size += buftmp.length;
  }).on('end', function () 
  {
    console.log(Buffer.concat(buf,size).toString());
  }).on('error', function (error) 
  {
    console.log(error.message);
  }).on('aborted', function() 
  {
    console.log('aborted');
  });
});
request.write(str);
request.end(); 
 }
4 回复

buffer没关系。content-length应该是encodeURIComponent之后的字符串长度.

还真是,怎么早没看你的帖子呢

嗯,中文尽量用buffer过一下

您好,DeNA在招聘资深Node.js的职位,您有兴趣了解一下吗?

回到顶部