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

ぴろり上西 2009年09月08日

パワフルなCMSを98,000円で。

Movable Typeで承認フロー、会員サイト構築ができます。

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

投稿者 ぴろり上西 : 09/08

Movable Typeを利用したウェブサイト開発はお任せください!

100の企業が認めた成功へ導くCMS構築

スカイアークは創業以来6年間、Movable Typeを一貫して活用し、お客様の様々なウェブサイトをCMS化しました。MTを利用したウェブサイトはスカイアークにお任せください。

MT・CMS構築について詳しく見る

お問い合わせはこちらから お電話でのお問い合わせ03-5475-5101

MTエンジニアブログ

MTCMS Smartキャンペーン!
承認フロー付きCMS「MTCMS Smart(98,000円)」をお買い上げの方、MTライセンス1本がタダに!

配布プラグイン一覧

MultiFileUploader
複数ファイルを一括でアップロードできるMovable Typeプラグイン
ParentalInclude
MT5でウェブサイトとブログのテンプレート連携を便利にするプラグイン
DuplicateEntry
ブログ記事を複製または移動するMovableTypeプラグイン
NotifyAnythingChanged
何かが起きたらメールで通知するMovableTypeプラグイン
rssEntry
取込んだRSSをエントリとして書き出すMovableTypeプラグイン
AutoTagging
面倒な記事のタグ付けを自動化する
FutureRebuild
日時を指定してページを再構築する
EntryImExporter
エントリをCSVに書出したり、CSVから一括登録するMovableTypeプラグイン
MailPack
Movable Typeで簡単携帯投稿!メール投稿プラグイン
DirectoryUtility
カテゴリ・フォルダの階層を表示したり、親フォルダを表示したり、何かと便利なプラグイン
CSVList
CSVデータを整形して表示する
PageBute
静的ページ用ページ分割プラグイン

注目記事

RSS

ページの先頭へ戻る