エンジニアブログ

エンジニアブログ
MT技術情報

JavaScriptで文字列のバイト数(≠文字数)を求める方法

ぴろり上西 2009年09月08日

 JavaScriptでは"あいうえお".lengthとすると、文字数(この場合は5)が返ります。そうではなくて、文字列のバイトコードサイズを取得したい場合について。

<script type="text/javascript">
var a = 'ABC123あいう';// in 15 bytes UTF-8
var tbl = [ 0, 1, 1, 1, 2, 3, 2, 3, 4, 3 ];
var len = 0;
for (i = 0; i < a.length; i++)
len += tbl [encodeURIComponent(a.charAt(i)).length];
alert(len);
</script>

 UTF-8 限定です。UTF-8 では,0x00~0x7f 以上の文字コードは必ず複数個の %XX で表されるので、テーブル参照する必要はないハズですが,念のため,下表のようなテーブルを用いてバイト数をカウントしています。

%XX%XX%XX 9 -> 3
%XX%XXAA 8 -> 4
%XX%XXA 7 -> 3
%XX%XX 6 -> 2
%XXAA 5 -> 3
%XXA 4 -> 2
%XX 3 -> 1
%X 2 -> 1
A 1 -> 1
(0) -> 0

 ところで,JavaScript の Virtual Machine 上では,物理的な CPU で活用されているパイプライン処理や分岐予測などの技術が実装されているかは知らないのですが(多分,今のところは無い)おそらくはテーブル参照による方法が一番高速ではないかと思います。