文字列のバイト数を求める

connectのmiddlewareつくって、なんか途中でレスポンスが切れてておかしいなと思ってたら、こうなってた。

res.writeHead(200, {
  'Content-Length': str.length
});

lengthだとマルチバイトも1とカウントするのでマルチバイトが入ってた場合にlengthが合わなくなって途中でbodyが切れてた。バイト数を求めるにはBuffer.byteLengthを使えばよさげ。

res.writeHead(200, {
  'Content-Length': Buffer.byteLength(str, 'utf8')
});