被bug折腾了1天,才发现原来是中文字符串长度的问题。。。这次长记性了。
console.log('正常分娩'.length)
console.log(Buffer.byteLength('正常分娩', 'utf8'))
竟然是有差的。。。这个以前真没有注意过啊!
刚开始在调用web service时服务器返回400错误,经多次试验发现只有当参数里有中文值时会出现这个问题,一直以为是编码问题,各种转码后发现问题依旧。在论坛挖了坟之后去看api,然后从新检查代码。 终于在soap模块里找到header组装时这个bug,http.js小改了一下就解决了。 把
headers["Content-Length"] = data.length;
改为
headers["Content-Length"] = Buffer.byteLength(data, 'utf8');
服务调用成功。
12 回复
奇怪,好像不是一个汉字两个Bytes,请看结果:
console.log('正常分娩’.length)
4
undefined
console.log(Buffer.byteLength('正常分娩’, ‘utf8’))
12
undefined