JavaScript

JavaScript文字列のバイト数を数える - encodeURIComponent版

More than 5 years have passed since last update.

http://qiita.com/items/a46a70b724e3dd9378f2 JavaScript文字列のバイト数を数える - にインスパイアされました。

こちらは実際にencodeURIComponent()でUTF-8のバイト列の16進数バイト表記に直して正規表現で処理する形式。バイト数をcharCodeAt()で数えるよりコストはかかるけど、たぶん正確性や保守性は高いんじゃないかな。速度を気にしない場合にどうぞ。


bytes2.js

String.prototype.bytes2 = function () {

return(encodeURIComponent(this).replace(/%../g,"x").length);
}

コアのprototypeを拡張すると速度が低下することを気にする人用の関数バージョン。


bytes2func.js

function bytes2(str) {

return(encodeURIComponent(str).replace(/%../g,"x").length);
}

結果


output.js

console.log( "あああa".bytes2() ); // -> 10

console.log( "èî".bytes2() ); // -> 4

試していないけど、UTF-8には6バイトまで種類があるらしいから、これで定義しておけばしばらくは困らないんじゃないかな。